理解优化问题并在Matlab中求解(选择合适的解算器)
也许是一句经典的话:几天来我一直试图理解这一点,但没有成功——真的是关于我! 让我们从这里看一个简单的约束优化问题,即在预算约束下实现收入最大化。所以问题是 我们可以在Matlab中使用fmincon 或者我们可以使用拉格朗日代价函数,并将其改写为无约束优化问题(我在这个阶段是正确的吗?) 然后使用fminsearch或fminunc求解该目标函数(甚至使用ga进行了尝试)理解优化问题并在Matlab中求解(选择合适的解算器),matlab,math,optimization,fminsearch,Matlab,Math,Optimization,Fminsearch,也许是一句经典的话:几天来我一直试图理解这一点,但没有成功——真的是关于我! 让我们从这里看一个简单的约束优化问题,即在预算约束下实现收入最大化。所以问题是 我们可以在Matlab中使用fmincon 或者我们可以使用拉格朗日代价函数,并将其改写为无约束优化问题(我在这个阶段是正确的吗?) 然后使用fminsearch或fminunc求解该目标函数(甚至使用ga进行了尝试) lambda=2.5927; >>目标=@(x)-200*x(1)^(2/3)*x(2)^(1/3)-lambda*(
lambda=2.5927;
>>目标=@(x)-200*x(1)^(2/3)*x(2)^(1/3)-lambda*(20*x(1)+170*x(2)-20000;
x=fminuncfminunc(目标[1,1])
>>问题似乎是无限的。
fminunc已停止,因为目标函数值小于
或等于目标函数极限的值。
x=
1.0e+19*
0.2504 6.4423
>>x=fminsearch(目标[1,1])
退出:已超过最大功能评估数
-增加MaxFunEvals选项。
当前功能值:-51855.290146
x=
0.1088 1.7458
使用fmincon给出不同的结果,甚至不接近约束解。我试图改变标志,把lambda=1
那么为什么是这样,我错在哪里,或者我不明白什么
提前谢谢 正如输出清楚地告诉您的,您最后的调用没有到达解决方案,但由于其他原因已完成。结果是不可信的,我投票结束这个问题,因为它与编程无关。它确实与Matlab及其语法有关,因此我既没有错误地使用Matlab函数,也没有错误地使用我的期望值,是的,与数学理论有关。输出清楚地告诉你,您上次的呼叫未到达解决方案,但由于其他原因已完成。结果是不可信的,我投票结束这个问题,因为它与编程无关。它确实与Matlab及其语法有关,因此我既没有错误地使用Matlab函数,也没有错误地期望,是的,与数学理论有关
objective = @(x) -200*x(1)^(2/3)*x(2)^(1/3);
[X,FVAL,EXITFLAG,OUTPUT,LAMBDA,GRAD,HESSIAN] = fmincon(objective,[1,1],[],[],[20, 170],20000,[],[],[])
>> X =
666.6669 39.2157
LAMBDA =
struct with fields:
eqlin: 2.5927
lambda = 2.5927;
>> objective = @(x) -200*x(1)^(2/3)*x(2)^(1/3)-lambda*(20*x(1) + 170*x(2) - 20000);
x = fminuncfminunc(objective,[1, 1])
>> Problem appears unbounded.
fminunc stopped because the objective function value is less than
or equal to the value of the objective function limit.
<stopping criteria details>
x =
1.0e+19 *
0.2504 6.4423
>> x = fminsearch(objective,[1, 1])
Exiting: Maximum number of function evaluations has been exceeded
- increase MaxFunEvals option.
Current function value: -51855.290146
x =
0.1088 1.7458