sparkle
2008-01-28, 10:31
我利用fmincon函数在做一个工程优化时,遇到这样一个问题:初次优化matlab运算的很慢,大约两个小时才运算完毕,提示“Maximum number of function evaluations exceeded”。
然后我做了如下处理:1、我把MaxFunEvals 和MaxIter 都加大了3倍
2、我把得到的结果作为新的初值
再次运算整整24小时没有结果,不知道大家遇到这种情况没有,希望高手帮忙!先谢了
程序如下:
%目标函数
function f_X=f(X)
f_X=((X(1)+X(2)+X(3)+X(4)+X(5)+X(6)+X(7)+X(8)+X(9))/391.32-0.05)^2+((X(10)+X(11)+X(12)+X(13)+X(14)+X(15)+X(16)+X(17)+X(18))/114.48-0.05)^2+((X(19)+X(20)+X(21)+X(22)+X(23)+X(24)+X(25)+X(26)+X(27))/503.73-0.05)^2+((X(28)+X(29)+X(30)+X(31)+X(32)+X(33)+X(34)+X(35)+X(36))/3202.68-0.05)^2+((X(37)+X(38)+X(39)+X(40)+X(41)+X(42)+X(43)+X(44)+X(45))/32.7-0.05)^2+((X(46)+X(47)+X(48)+X(49)+X(50)+X(51)+X(52)+X(53)+X(54))/78.5-0.05)^2+((X(55)+X(56)+X(57)+X(58)+X(59)+X(60)+X(61)+X(62)+X(63))/39.35-0.05)^2+((X(64)+X(65)+X(66)+X(67)+X(68)+X(69)+X(70)+X(71)+X(72))/189.72-0.05)^2+((X(73)+X(74)+X(75)+X(76)+X(77)+X(78)+X(79)+X(80)+X(81))/657.47-0.05)^2+((X(82)+X(83)+X(84)+X(85)+X(86)+X(87)+X(88)+X(89)+X(90))/39.3-0.05)^2+((X(91)+X(92)+X(93)+X(94)+X(95)+X(96)+X(97)+X(98)+X(99))/39.2-0.05)^2+((X(100)+X(101)+X(102)+X(103)+X(104)+X(105)+X(106)+X(107)+X(108))/114.49-0.05)^2+((X(109)+X(110)+X(111)+X(112)+X(113)+X(114)+X(115)+X(116)+X(117))/39.2-0.05)^2+((X(118)+X(119)+X(120)+X(121)+X(122)+X(123)+X(124)+X(125)+X(126))/39.3-0.05)^2+((X(127)+X(128)+X(129)+X(130)+X(131)+X(132)+X(133)+X(134)+X(135))/2464.33-0.05)^2+((X(136)+X(137)+X(138)+X(139)+X(140)+X(141)+X(142)+X(143)+X(144))/157-0.05)^2+((X(145)+X(146)+X(147)+X(148)+X(149)+X(150)+X(151)+X(152)+X(153))/39.3-0.05)^2+((X(154)+X(155)+X(156)+X(157)+X(158)+X(159)+X(160)+X(161)+X(162))/303.27-0.05)^2+((X(163)+X(164)+X(165)+X(166)+X(167)+X(168)+X(169)+X(170)+X(171))/484.1-0.05)^2+((X(172)+X(173)+X(174)+X(175)+X(176)+X(177)+X(178)+X(179)+X(180))/75.2-0.05)^2
%主程序
%---初始化
clear;
X0=zeros(1,180);
%---控制x的系数矩阵
A=zeros(180);
for i=1:20;
A(i,i*9-8:9*i)=1;
end
A;
A(1,6:8)=0;
A(2,15:17)=0;
A(3,24:26)=0;
A(4,33:34)=0;
A(5,42:44)=0;
A(6,52:53)=0;
A(7,60:62)=0;
A(8,69)=0;
A(8,71)=0;
A(9,78:80)=0;
A(10,87:89)=0;
A(11,97:98)=0;
A(12,106:107)=0;
A(13,114:116)=0;
A(14,123:125)=0;
A(15,133:134)=0;
A(16,142:143)=0;
A(17,152)=0;
A(18,159:161)=0;
A(19,168)=0;
A(19,170)=0;
A(20,177)=0;
A(20,179)=0;
%---控制 X>0的矩阵
for i=1:5;
A(20+i,i)=-1;
end
for i=1:6;
A(25+i,i+8)=-1;
end
for i=1:6;
A(31+i,17+i)=-1;
end
for i=1:6;
A(37+i,26+i)=-1;
end
for i=1:7;
A(43+i,34+i)=-1;
end
for i=1:7;
A(50+i,44+i)=-1;
end
for i=1:6;
A(57+i,53+i)=-1;
end
for i=1:6;
A(63+i,62+i)=-1;
end
A(70,70)=-1;
for i=1:6;
A(70+i,71+i)=-1;
end
for i=1:6;
A(76+i,80+i)=-1;
end
for i=1:7;
A(82+i,89+i)=-1;
end
for i=1:7;
A(89+i,98+i)=-1;
end
for i=1:6;
A(96+i,107+i)=-1;
end
for i=1:6;
A(i+102,116+i)=-1;
end
for i=1:7;
A(108+i,125+i)=-1;
end
for i=1:7;
A(115+i,134+i)=-1;
end
for i=1:8;
A(122+i,143+i)=-1;
end
for i=1:6;
A(130+i,152+i)=-1;
end
for i=1:6;
A(136+i,161+i)=-1;
end
A(143,169)=-1;
for i=1:6;
A(i+143,170+i)=-1;
end
A(150,178)=-1;
A(151,180)=-1;
%不等式约束
b=zeros(1,180)';
b(1:20)=[8.6528 2.2992 2.9092 61.8772 0.458 -1.49 -0.378 0.2688 1.6608 0.322 -1.412 0.3796 -0.282 0.422 -9.2468 -0.43 -0.268 5.1308 -12.586 0.058];
%修改数据0124最新,确定无误
b(21:151)=[1.1 3.5 2.4 0 0 0 0.33 0.55 0.64 0 1 0 1.43 1.95 1.56 0 11 0 9.13 27 22.05 0 5.25 2.8 0 0.11 0.2 0.64 0 0.5 0 0.22 2.4 0.64 0 1.6 0.62 0 0.11 0.8 0.64 0 0.8 0.2 0.55 4.2 1.2 0 0 0.47 0 1.35 5.55 4.23 0 13.6 0 0.2 0.8 0.64 0 0 0.1 0.11 1 0.64 0.1 0.7 0.65 0 0.33 1.8 0.72 0 0.9 0.62 0.1 0.11 0.6 0.64 0 0.6 0.1 0.11 0.8 0.64 0 0 0 7.04 24.8 16.86 0 50.8 8.32 0.7 0.44 1.5 0.91 0 3.2 0.66 0 0.11 0.8 0.65 0 0.8 0.63 0.12 0.1 0.88 4.25 1.87 0 0 0 1.43 11.8 3.12 0 0 1.56 0.6 0.3 0.52 0.7 0 1.6 0.25 0]';
% Aeq等式约束
B=eye(9,9);
Aeq=[B B B B B B B B B B B B B B B B B B B B];
Aeq(6,6) =0;
Aeq(6,15) =0;
Aeq(6,24) =0;
Aeq(6,33) =0;
Aeq(6,42) =0;
Aeq(6,60) =0;
Aeq(6,69) =0;
Aeq(6,78) =0;
Aeq(6,87) =0;
Aeq(6,114) =0;
Aeq(6,123) =0;
Aeq(6,159) =0;
Aeq(6,168) =0;
Aeq(6,177) =0;
Aeq(7,7) =0;
Aeq(7,16) =0;
Aeq(7,25) =0;
Aeq(7,34) =0;
Aeq(7,43) =0;
Aeq(7,52) =0;
Aeq(7,61) =0;
Aeq(7,79) =0;
Aeq(7,88) =0;
Aeq(7,97) =0;
Aeq(7,106) =0;
Aeq(7,115) =0;
Aeq(7,124) =0;
Aeq(7,133) =0;
Aeq(7,142) =0;
Aeq(7,160) =0;
Aeq(8,8) =0;
Aeq(8,17) =0;
Aeq(8,26) =0;
Aeq(8,44) =0;
Aeq(8,53) =0;
Aeq(8,62) =0;
Aeq(8,71) =0;
Aeq(8,80) =0;
Aeq(8,89) =0;
Aeq(8,98) =0;
Aeq(8,107) =0;
Aeq(8,116) =0;
Aeq(8,125) =0;
Aeq(8,134) =0;
Aeq(8,143) =0;
Aeq(8,152) =0;
Aeq(8,161) =0;
Aeq(8,170) =0;
Aeq(8,179) =0;
beq=[-0.952937359 -11.454 -13.87916445 4.138077294 68.62181342 -4.293981906 0.674824532 -2.38 1.27];
% 上界
lb=zeros(180,1);
for m=1:20;
lb(9*m-8:9*m,1)=[0 0 0 0 0 0 0 0 0]';
end
% 下界
ub=zeros(180,1);
for k=1:20;
ub(9*k-8:9*k-1,1)=[0.006 0.02 0.009 0.004 0.032 0.0040 0.03 0.0009]';
ub(9*k,1)=0.01022;
end
D=zeros(180,1);
D(1:9,1)=391.3;
D(10:18,1)=114.48;
D(19:27,1)=503.73;
D(28:36,1)=3202.68;
%D(35,1)=3202.68;
D(37:45,1)=32.7;
D(46:54,1)=78.5;
D(55:63,1)=39.3;
D(64:72,1)=189.72;
D(73:81,1)=657.47;
D(82:90,1)=39.3;
D(91:99,1)=39.2;
D(100:108,1)=114.49;
D(109:117,1)=39.2;
D(118:126,1)=39.3;
D(127:135,1)=2464.33;
D(136:144,1)=157;
D(145:153,1)=39.3;
D(154:162,1)=303.27;
D(163:171,1)=484.1;
D(172:180,1)=75.2;
% 初始消耗矩阵
G=[1.1 3.5 2.4 0 0 0 0 0 0 0.33 0.55 0.64 0 1 0 0 0 0 1.43 1.95 1.56 0 11 0 0 0 0 9.13 27 22.05 0 5.25 0 0 2.8 0 0.11 0.2 0.64 0 0.5 0 0 0 0 0.22 2.4 0.64 0 1.6 0.62 0 0 0 0.11 0.8 0.64 0 0.8 0 0 0 0.2 0.55 4.2 1.2 0 0 0 0.47 0 0 1.35 5.55 4.23 0 13.6 0 0 0 0 0.2 0.8 0.64 0 0 0 0 0 0.1 0.11 1 0.64 0.1 0.7 0.65 0 0 0 0.33 1.8 0.72 0 0.9 0.62 0 0 0.1 0.11 0.6 0.64 0 0.6 0 0 0 0.1 0.11 0.8 0.64 0 0 0 0 0 0 7.04 24.8 16.86 0 50.8 8.32 0 0 0.7 0.44 1.5 0.91 0 3.2 0.66 0 0 0 0.11 0.8 0.65 0 0.8 0.63 0.12 0 0.1 0.88 4.25 1.87 0 0 0 0 0 0 1.43 11.8 3.12 0 0 0 1.56 0 0.6 0.3 0.52 0.7 0 1.6 0 0.25 0 0]';
% x上下界
lb=lb.*D-G;
ub=ub.*D-G;
options=optimset('largescale','off','GradObj','on')
%options=optimset('largescale','off','maxfunevals',5e+4,'MaxIter',5000,'GradObj','on');
[X,fval,exitflag,output,lambda,grad,hessian]=fmincon('f4',X0,A,b,Aeq,beq,lb,ub);
%[x,resnorm] = lsqlin(C,d,A,b,Aeq,beq,X0);
% x=x';
% G=G';
然后我做了如下处理:1、我把MaxFunEvals 和MaxIter 都加大了3倍
2、我把得到的结果作为新的初值
再次运算整整24小时没有结果,不知道大家遇到这种情况没有,希望高手帮忙!先谢了
程序如下:
%目标函数
function f_X=f(X)
f_X=((X(1)+X(2)+X(3)+X(4)+X(5)+X(6)+X(7)+X(8)+X(9))/391.32-0.05)^2+((X(10)+X(11)+X(12)+X(13)+X(14)+X(15)+X(16)+X(17)+X(18))/114.48-0.05)^2+((X(19)+X(20)+X(21)+X(22)+X(23)+X(24)+X(25)+X(26)+X(27))/503.73-0.05)^2+((X(28)+X(29)+X(30)+X(31)+X(32)+X(33)+X(34)+X(35)+X(36))/3202.68-0.05)^2+((X(37)+X(38)+X(39)+X(40)+X(41)+X(42)+X(43)+X(44)+X(45))/32.7-0.05)^2+((X(46)+X(47)+X(48)+X(49)+X(50)+X(51)+X(52)+X(53)+X(54))/78.5-0.05)^2+((X(55)+X(56)+X(57)+X(58)+X(59)+X(60)+X(61)+X(62)+X(63))/39.35-0.05)^2+((X(64)+X(65)+X(66)+X(67)+X(68)+X(69)+X(70)+X(71)+X(72))/189.72-0.05)^2+((X(73)+X(74)+X(75)+X(76)+X(77)+X(78)+X(79)+X(80)+X(81))/657.47-0.05)^2+((X(82)+X(83)+X(84)+X(85)+X(86)+X(87)+X(88)+X(89)+X(90))/39.3-0.05)^2+((X(91)+X(92)+X(93)+X(94)+X(95)+X(96)+X(97)+X(98)+X(99))/39.2-0.05)^2+((X(100)+X(101)+X(102)+X(103)+X(104)+X(105)+X(106)+X(107)+X(108))/114.49-0.05)^2+((X(109)+X(110)+X(111)+X(112)+X(113)+X(114)+X(115)+X(116)+X(117))/39.2-0.05)^2+((X(118)+X(119)+X(120)+X(121)+X(122)+X(123)+X(124)+X(125)+X(126))/39.3-0.05)^2+((X(127)+X(128)+X(129)+X(130)+X(131)+X(132)+X(133)+X(134)+X(135))/2464.33-0.05)^2+((X(136)+X(137)+X(138)+X(139)+X(140)+X(141)+X(142)+X(143)+X(144))/157-0.05)^2+((X(145)+X(146)+X(147)+X(148)+X(149)+X(150)+X(151)+X(152)+X(153))/39.3-0.05)^2+((X(154)+X(155)+X(156)+X(157)+X(158)+X(159)+X(160)+X(161)+X(162))/303.27-0.05)^2+((X(163)+X(164)+X(165)+X(166)+X(167)+X(168)+X(169)+X(170)+X(171))/484.1-0.05)^2+((X(172)+X(173)+X(174)+X(175)+X(176)+X(177)+X(178)+X(179)+X(180))/75.2-0.05)^2
%主程序
%---初始化
clear;
X0=zeros(1,180);
%---控制x的系数矩阵
A=zeros(180);
for i=1:20;
A(i,i*9-8:9*i)=1;
end
A;
A(1,6:8)=0;
A(2,15:17)=0;
A(3,24:26)=0;
A(4,33:34)=0;
A(5,42:44)=0;
A(6,52:53)=0;
A(7,60:62)=0;
A(8,69)=0;
A(8,71)=0;
A(9,78:80)=0;
A(10,87:89)=0;
A(11,97:98)=0;
A(12,106:107)=0;
A(13,114:116)=0;
A(14,123:125)=0;
A(15,133:134)=0;
A(16,142:143)=0;
A(17,152)=0;
A(18,159:161)=0;
A(19,168)=0;
A(19,170)=0;
A(20,177)=0;
A(20,179)=0;
%---控制 X>0的矩阵
for i=1:5;
A(20+i,i)=-1;
end
for i=1:6;
A(25+i,i+8)=-1;
end
for i=1:6;
A(31+i,17+i)=-1;
end
for i=1:6;
A(37+i,26+i)=-1;
end
for i=1:7;
A(43+i,34+i)=-1;
end
for i=1:7;
A(50+i,44+i)=-1;
end
for i=1:6;
A(57+i,53+i)=-1;
end
for i=1:6;
A(63+i,62+i)=-1;
end
A(70,70)=-1;
for i=1:6;
A(70+i,71+i)=-1;
end
for i=1:6;
A(76+i,80+i)=-1;
end
for i=1:7;
A(82+i,89+i)=-1;
end
for i=1:7;
A(89+i,98+i)=-1;
end
for i=1:6;
A(96+i,107+i)=-1;
end
for i=1:6;
A(i+102,116+i)=-1;
end
for i=1:7;
A(108+i,125+i)=-1;
end
for i=1:7;
A(115+i,134+i)=-1;
end
for i=1:8;
A(122+i,143+i)=-1;
end
for i=1:6;
A(130+i,152+i)=-1;
end
for i=1:6;
A(136+i,161+i)=-1;
end
A(143,169)=-1;
for i=1:6;
A(i+143,170+i)=-1;
end
A(150,178)=-1;
A(151,180)=-1;
%不等式约束
b=zeros(1,180)';
b(1:20)=[8.6528 2.2992 2.9092 61.8772 0.458 -1.49 -0.378 0.2688 1.6608 0.322 -1.412 0.3796 -0.282 0.422 -9.2468 -0.43 -0.268 5.1308 -12.586 0.058];
%修改数据0124最新,确定无误
b(21:151)=[1.1 3.5 2.4 0 0 0 0.33 0.55 0.64 0 1 0 1.43 1.95 1.56 0 11 0 9.13 27 22.05 0 5.25 2.8 0 0.11 0.2 0.64 0 0.5 0 0.22 2.4 0.64 0 1.6 0.62 0 0.11 0.8 0.64 0 0.8 0.2 0.55 4.2 1.2 0 0 0.47 0 1.35 5.55 4.23 0 13.6 0 0.2 0.8 0.64 0 0 0.1 0.11 1 0.64 0.1 0.7 0.65 0 0.33 1.8 0.72 0 0.9 0.62 0.1 0.11 0.6 0.64 0 0.6 0.1 0.11 0.8 0.64 0 0 0 7.04 24.8 16.86 0 50.8 8.32 0.7 0.44 1.5 0.91 0 3.2 0.66 0 0.11 0.8 0.65 0 0.8 0.63 0.12 0.1 0.88 4.25 1.87 0 0 0 1.43 11.8 3.12 0 0 1.56 0.6 0.3 0.52 0.7 0 1.6 0.25 0]';
% Aeq等式约束
B=eye(9,9);
Aeq=[B B B B B B B B B B B B B B B B B B B B];
Aeq(6,6) =0;
Aeq(6,15) =0;
Aeq(6,24) =0;
Aeq(6,33) =0;
Aeq(6,42) =0;
Aeq(6,60) =0;
Aeq(6,69) =0;
Aeq(6,78) =0;
Aeq(6,87) =0;
Aeq(6,114) =0;
Aeq(6,123) =0;
Aeq(6,159) =0;
Aeq(6,168) =0;
Aeq(6,177) =0;
Aeq(7,7) =0;
Aeq(7,16) =0;
Aeq(7,25) =0;
Aeq(7,34) =0;
Aeq(7,43) =0;
Aeq(7,52) =0;
Aeq(7,61) =0;
Aeq(7,79) =0;
Aeq(7,88) =0;
Aeq(7,97) =0;
Aeq(7,106) =0;
Aeq(7,115) =0;
Aeq(7,124) =0;
Aeq(7,133) =0;
Aeq(7,142) =0;
Aeq(7,160) =0;
Aeq(8,8) =0;
Aeq(8,17) =0;
Aeq(8,26) =0;
Aeq(8,44) =0;
Aeq(8,53) =0;
Aeq(8,62) =0;
Aeq(8,71) =0;
Aeq(8,80) =0;
Aeq(8,89) =0;
Aeq(8,98) =0;
Aeq(8,107) =0;
Aeq(8,116) =0;
Aeq(8,125) =0;
Aeq(8,134) =0;
Aeq(8,143) =0;
Aeq(8,152) =0;
Aeq(8,161) =0;
Aeq(8,170) =0;
Aeq(8,179) =0;
beq=[-0.952937359 -11.454 -13.87916445 4.138077294 68.62181342 -4.293981906 0.674824532 -2.38 1.27];
% 上界
lb=zeros(180,1);
for m=1:20;
lb(9*m-8:9*m,1)=[0 0 0 0 0 0 0 0 0]';
end
% 下界
ub=zeros(180,1);
for k=1:20;
ub(9*k-8:9*k-1,1)=[0.006 0.02 0.009 0.004 0.032 0.0040 0.03 0.0009]';
ub(9*k,1)=0.01022;
end
D=zeros(180,1);
D(1:9,1)=391.3;
D(10:18,1)=114.48;
D(19:27,1)=503.73;
D(28:36,1)=3202.68;
%D(35,1)=3202.68;
D(37:45,1)=32.7;
D(46:54,1)=78.5;
D(55:63,1)=39.3;
D(64:72,1)=189.72;
D(73:81,1)=657.47;
D(82:90,1)=39.3;
D(91:99,1)=39.2;
D(100:108,1)=114.49;
D(109:117,1)=39.2;
D(118:126,1)=39.3;
D(127:135,1)=2464.33;
D(136:144,1)=157;
D(145:153,1)=39.3;
D(154:162,1)=303.27;
D(163:171,1)=484.1;
D(172:180,1)=75.2;
% 初始消耗矩阵
G=[1.1 3.5 2.4 0 0 0 0 0 0 0.33 0.55 0.64 0 1 0 0 0 0 1.43 1.95 1.56 0 11 0 0 0 0 9.13 27 22.05 0 5.25 0 0 2.8 0 0.11 0.2 0.64 0 0.5 0 0 0 0 0.22 2.4 0.64 0 1.6 0.62 0 0 0 0.11 0.8 0.64 0 0.8 0 0 0 0.2 0.55 4.2 1.2 0 0 0 0.47 0 0 1.35 5.55 4.23 0 13.6 0 0 0 0 0.2 0.8 0.64 0 0 0 0 0 0.1 0.11 1 0.64 0.1 0.7 0.65 0 0 0 0.33 1.8 0.72 0 0.9 0.62 0 0 0.1 0.11 0.6 0.64 0 0.6 0 0 0 0.1 0.11 0.8 0.64 0 0 0 0 0 0 7.04 24.8 16.86 0 50.8 8.32 0 0 0.7 0.44 1.5 0.91 0 3.2 0.66 0 0 0 0.11 0.8 0.65 0 0.8 0.63 0.12 0 0.1 0.88 4.25 1.87 0 0 0 0 0 0 1.43 11.8 3.12 0 0 0 1.56 0 0.6 0.3 0.52 0.7 0 1.6 0 0.25 0 0]';
% x上下界
lb=lb.*D-G;
ub=ub.*D-G;
options=optimset('largescale','off','GradObj','on')
%options=optimset('largescale','off','maxfunevals',5e+4,'MaxIter',5000,'GradObj','on');
[X,fval,exitflag,output,lambda,grad,hessian]=fmincon('f4',X0,A,b,Aeq,beq,lb,ub);
%[x,resnorm] = lsqlin(C,d,A,b,Aeq,beq,X0);
% x=x';
% G=G';