matlab里跑scip最优化,primalbound跑不出来,显示为'--',gap显示为'Inf',最后的结果显示NAN
背景信息:
大概160个变量,120个约束;
用之前的参数可以跑出来,但是换了参数之后跑不出来;
X0确实在边界之内。
matlab里跑scip最优化,primalbound跑不出来,显示为'--',gap显示为'Inf',最后的结果显示NAN
背景信息:
大概160个变量,120个约束;
用之前的参数可以跑出来,但是换了参数之后跑不出来;
X0确实在边界之内。
%importx0
x0_table=xlsread('C:\Users\Lenovo\Desktop\距毕业\Use phase\matlab\excel\x0_0112_class1.xlsx')
fun=@obj
nlcon=@cons
cl=[zeros(1,120)];
cu=[zeros(1,120)];
lb=[zeros(1,20*2),1.059891984*ones(1,20),zeros(1,100)];
ub=[ones(1,20*2),2.45*ones(1,20),20*ones(1,20),100*ones(1,20),2.45*ones(1,20),100*ones(1,20),2.45*ones(1,20)];
%x0
x0=[x0_table(:,1);x0_table(:,2);x0_table(:,3);x0_table(:,4);x0_table(:,5);x0_table(:,6);x0_table(:,7);x0_table(:,8)]
xtype=repelem('IC',[40,120]);
opts=optiset('solver','scip','display','iter');
opt=opti('fun',fun,'nl',nlcon,cl,cu,'bounds',lb,ub,'xtype',xtype,'x0',x0,'options',opts)
[x,fval,exitflag,info]=solve(opt,x0)
% 1. xt:1-20;
% 2. yt:21-40;
% 3. IRI:41-60
% 4. Total_load:61-80;
% 5. PCI:81-100;
% 6. Virtual_IRI:101-120;
% 7. Virtual_PCI:121-140;
% 8. Virtual_load:141-160;
function o=obj(x)
n=20
o=0
for i=1:n
%o = x(i)*x(20+i)*E_major+ x(i)*(1-x(20+i))*E_minor+x(160+i)*0.004+x(180+i)*0.025+o
o = x(i)*x(20+i)*1088.79+ x(i)*(1-x(20+i))*238.84+0.22*(x(40+i)-1.059891984)*2950*1.08^(i-1)*365/100*0.00413+0.71*(449+203+592)*1.08^(i-1)*(x(40+i)-1.059891984)*365/100*0.00393+o;
end
end
function con=cons(x)
n=20
for i=1
%1. Total load,原是con(i)=Load_1year(i)-x(60+i); %% 0.409M, W19 from excel
con(i)=0.098484554*1.08^(i-1)-x(60+i)
%2. PCI and Total load
con(n*1+i)=100-5.393*x(60+i)-x(80+i);
%3. IRI and PCI
con(n*2+i)=15.33/(1+exp(2.6-0.18*(-log(x(80+i)/100)/0.017922)^(1/1.4324)))-x(40+i);
%4. Virtual PCI and IRI(special)
con(n*3+i)=x(120+i);
%5. Virtual load and Virtual PCI(special)
con(n*4+i)=x(140+i);
%8. IRI_virtual,二次方程,>1.36或=0,保证IRI->virtualPCI没问题
con(n*5+i)=(x(40+i)*x(i)*(1-x(20+i)))*(x(40+i)*x(i)*(1-x(20+i))-(1.059891984+0.3))-x(100+i)
end
for i=2:n
%1. Total load,原是con(i)=(x(60+i-1)+Load_1year(i))*(1-x(i-1))+x(i-1)*x(20+i-1)*Load_1year(i)+x(i-1)*(1-x(20+i-1))*(Load_1year(i)+x(140+i-1))-x(60+i);
con(i)=(x(60+i-1)+0.098484554*1.08^(i-1))*(1-x(i-1))+x(i-1)*x(20+i-1)*0.098484554*1.08^(i-1)+x(i-1)*(1-x(20+i-1))*(0.098484554*1.08^(i-1)+x(140+i-1))-x(60+i);
%2. PCI and Total load
con(n*1+i)=100-5.393*x(60+i)-x(80+i);
%3. IRI and PCI
con(n*2+i)=15.33/(1+exp(2.6-0.18*(-log(x(80+i)/100)/0.017922)^(1/1.4324)))-x(40+i);
%4. Virtual PCI and IRI
con(n*3+i)=100*exp((-0.017922)*(abs((2.6-log(15.33/(x(40+i)-0.3)-1))/0.18))^1.4324)-x(120+i);
%5. Virtual load and Virtual PCI,采取保护以得到最优解
%bonmin:con(n*5+i)=100*(1-exp(-(40.343/x(140+i))^0.346))-min(x(120+i),99.9);
%scip:con(n*5+i)=40.343*(log(100/(100-x(120+i))))^(1/0.346)-x(140+i);
con(n*4+i)=(100-x(120+i))/5.393-x(140+i);
%6. IRI_virtual,二次方程,>1.36或=0,保证IRI->virtualPCI没问题
con(n*5+i)=(x(40+i)*x(i)*(1-x(20+i)))*(x(40+i)*x(i)*(1-x(20+i))-(1.059891984+0.3))-x(100+i);
end
end