ChelseaXXX 2021-01-16 13:38 采纳率: 0%
浏览 216

matlab里用scip跑最优化,primalbound显示为--,结果NAN,请问为什么及如何改?

matlab里跑scip最优化,primalbound跑不出来,显示为'--',gap显示为'Inf',最后的结果显示NAN

背景信息:

大概160个变量,120个约束;

用之前的参数可以跑出来,但是换了参数之后跑不出来;

X0确实在边界之内。

  • 写回答

2条回答 默认 最新

  • ChelseaXXX 2021-01-16 13:59
    关注
    %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
    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题