|
以前看过一篇有关于“在结构工程师中计算机被滥用”的文章,现在看来,这样的警告绝非耸人听闻,而是一个真正的现实问题,绝对不仅仅是结构工程师存在这个问题...
1.无论何种优化算法,古典的或者现代的,步长都是在算法中每一步按某一法则自适应调整的,怎么可能在外部进行调整?!改变优化结果的精度只能通过对目标函数的三种(设计变量范数、目标函数接近程度和梯度任选其一)收敛法则进行。
2.你所给出的算例我不知道你仔细分析目标函数没有,愚钝如我,也能看出最前面一个大大的“abs”意思是求绝对值,意思是最小只能是0。
3.在MATLAB里运行如下一个语句:
意思是当浮点数小于这个数字的时候MATLAB自动认为其等于0,而你给的初值直接代入表达式就等于1e-21,早超过MATLAB所给的阈值,既然一个有关于某个表达式的绝对值计算机已经认为等于零,那要是还能继续迭代都鬼了!
当然你的初衷是好的,给出的但这个愿望根本不可能达到。
4.你在另一个帖子里所说的“给了一个很远的初值”,我只能说还不够远!
看看你表达式后面所给的系数就明白了——里面有1e-69量级的,在MATLAB中,这样的数字认为就是零。
5.楼上所说的问题与版本无关,该警告信息是算法的不适合,此时大规模信赖域算法自动转为newtonSQP算法。只要让就不会出现该警告信息。
最后,给出你这个“约束优化问题”的求解格式错误:
1).你用- options = optimset('largescale','off','display','iter');
- options=optimset(options,'tolx',1e-100);
- options=optimset(options,'tolfun',1e-100);
复制代码
三行语句定义的options根本就是白辛苦!
最后一行- [x,fval,exitflag,output] = fmincon(mcanshu55,x0,[],[],[],[],lb,ub,[],[],options)
复制代码
最后多了一个中括号,你的options根本就没有用上,你的这个语句相当于使用默认的options,然后又给主优化程序莫名其妙传递了一个结构数组options
2).你把设计变量的上、下边界定义到这么小的范围里,这个范围内随便给个值都是小于1e-16,让计算机给你迭代显然没可能。
你想让程序迭代?好办!我给你个初值+设计变量上下边界你试试:
- function ttt
- clc
- x0 =40000*[3.955164E-03,4.855234E-03,4.855234E-03,4.855234E-03,1.775628E-03];
- mcanshu55 = 'abs(0.19700000086079e-14+[2.5602e-041 1.0355e-053 1.8955e-033 8.6083e-024 2.4193e-043]*[x(1);x(2);x(3);x(4);x(5)]+[x(1) x(2) x(3) x(4) x(5)]*[-2.5664e-041 -1.6988e-061 -7.7855e-046 2.2380e-049 -7.8867e-057;0 4.5438e-062 -3.1368e-058 9.0490e-062 -3.1903e-069;0 0 -1.8915e-033 1.6579e-041 -1.0026e-048;0 0 0 3.7616e-032 2.1174e-051;0 0 0 0 -2.4194e-043]*[x(1);x(2);x(3);x(4);x(5)]-1.970001259803308e-15)';
- ff=inline(mcanshu55,'x');
- aaa=ff(x0)
- lb=zeros(1,5);ub=5000*ones(1,5);
- format long
- options = optimset('largescale','off','display','iter','tolx',1e-100,'tolfun',1e-100);
- [x,fval,exitflag,output] = fmincon(mcanshu55,x0,[],[],[],[],lb,ub,[],options)
复制代码
迭代结果:
- Maximum number of function evaluations exceeded;
- increase OPTIONS.MaxFunEvals.
- x =
- 1.0e+002 *
- Columns 1 through 4
- 1.58206560000000 1.94209360000000 1.94209360000000 1.94209360000000
- Column 5
- 0.71025120000000
- fval =
- 4.206183733940587e-022
- exitflag =
- 0
- output =
- iterations: 83
- funcCount: 504
- stepsize: 1
- algorithm: 'medium-scale: SQP, Quasi-Newton, line-search'
- firstorderopt: 8.586589827117003e-024
- cgiterations: []
- message: [1x79 char]
复制代码 |
评分
-
2
查看全部评分
-
|