优化中有48个变量。约束是:每个变量有自己的数值范围,外加有48个变量组成的4个等式。利用fmincon与本教材中的aspo均不能收敛优化,麻烦帮着寻找一下原因,万分感谢,代码如下: x=[-1150 -875 -414 578 671 850 1350 1800 1850 2375 2400 2530 2660 2790 2920 3050 3180 3310 3440 3570 3700 3830 3960 4090 4220 4300 4480 4610 4740 4870 5000 5130 5260 5390 5520 5650 5780 5910 6040 6170 6300 6430 6560 6690 6820 6950 7080 7210]; x=x.'; function [c,ceq]=ceqM(F) x=[-1150 -875 -414 578 671 850 1350 1800 1850 2375 2400 2530 2660 2790 2920 3050 3180 3310 3440 3570 3700 3830 3960 4090 4220 4300 4480 4610 4740 4870 5000 5130 5260 5390 5520 5650 5780 5910 6040 6170 6300 6430 6560 6690 6820 6950 7080 7210]; x=x.'; f1=(sum(F.*x)-x(2).*F(2)-x(6).*F(6)-x(26).*F(26)-x(36).*F(36))./4975; f2=(sum(F(1:48))-F(2)-F(6)-F(26)-F(36))-f1; ceq=[F(36)+f1.*(4975-x(26))/(x(36)-x(26));F(26)+f1-F(36);F(6)-x(2).*f2./(x(6)-x(2));F(2)+f2-F(6)]; c=[]; function M15=objective(F) x=[-1150 -875 -414 578 671 850 1350 1800 1850 2375 2400 2530 2660 2790 2920 3050 3180 3310 3440 3570 3700 3830 3960 4090 4220 4300 4480 4610 4740 4870 5000 5130 5260 5390 5520 5650 5780 5910 6040 6170 6300 6430 6560 6690 6820 6950 7080 7210]; x=x.'; M(1)=0; for i=2:48 M(i)=M(i-1)+sum(F(1:i-1)).*(x(i)-x(i-1)); end M15=M(15); A=[]; B=[]; Aeq=[]; Beq=[]; xm=[245.25 -2355 225 245.25 396 -2355 80 190 80 74 190 500 500 500 500 500 500 500 500 500 500 500 500 500 500 -9085 500 500 500 500 500 500 500 500 500 -9085 250 250 250 250 250 250 250 250 250 250 250 250]; xM=[245.25 -2330 225 245.25 396 -2330 80 190 80 74 190 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 -9065 1000 1000 1000 1000 1000 1000 1000 1000 1000 -9065 500 500 500 500 500 500 500 500 500 500 500 500]; x0=xm; ff=optimset; ff.LargeScale='off'; ff.TolFun=1e-30; ff.TolX=1e-15; ff.TolCo=1e-20; [y,f_opt,c,d]=fmincon(g,x0,A,B,Aeq,Beq,xm,xM,@ceqM,ff) |
1 条回复