帮助理解最优化问题和解决他们在Matlab(选择适当的解算器)
1视图(30天)
显示旧的评论
你好
也许一个经典短语:我一直试图理解这几天以来但不会成功——真的对我!
我们可以在Matlab解决它
fmincon
目标= @ (x) -200 * x (1) ^ (2/3) * x (2) ^ (1/3);
[X, FVAL EXITFLAG、输出λ,校友,黑森]= fmincon(目标,[1],[],[],[170],20000年,[],[],[])
> > X =
666.6669 - 39.2157
λ=
结构体字段:
eqlin: 2.5927
或者我们可以使用拉格朗日代价函数和重写这些无约束最优化问题(我在此阶段?)
然后解决这个目标函数
fminsearch
或
fminunc
(甚至
遗传算法
)
λ= 2.5927;
> >客观= @ (x) -200 * x (1) ^ (2/3) * x(2) ^(1/3)λ* (20 * x (1) + 170 * (2) - 20000);
x = fminuncfminunc(目标,[1])
> >问题出现无限。
fminunc因为目标函数值小于停了下来
或目标函数的值限制。
<停止标准详细信息>
x =
1.0 e + 19 *
0.2504 - 6.4423
> > x = fminsearch(目标,[1])
退出:最大数量函数的评估已经被超过
——增加MaxFunEvals选择。
当前的函数值:-51855.290146
x =
0.1088 - 1.7458
给出不同的结果,甚至不是接近限制的解决方案
fmincon。
我试图改变符号,把λ= 1 ....
为什么这样,我错了或者我不理解吗?
0评论
接受的答案
马特·J
2019年5月17日
编辑:马特·J
2019年5月17日
目标= @ (x)日志(x(1)) 1/3 2/3 * *日志(x (2));
[Xcon, FVAL EXITFLAG、输出λ,校友,黑森]= fmincon(目标,[1],[],[],[170],20000年,[],[],[])
objectiveUC = @ (x) 2/3 *日志(x(1)) *日志(x (2)) + 1/3 LAMBDA.eqlin * (20 * x (1) + 170 * (2) - 20000);
Xunc = fminunc (objectiveUC [1])
这将导致
Xcon =
666.6664 - 39.2157
Xunc =
666.6533 - 39.2154
3评论
马特·J
2019年5月20日
3目标相差单调转换,例如,
objective_2 =日志(-objective_1/200)
是一个单调函数objective_1。因此,如果一个人增加或减少,那么另一方,因此他们有最小值在同一位置。