我需要在 matlab 中使用以下约束最大化方程 3x+y:
2x+y<=6, x+3y<=9, 和 x,y>=0
我很难弄清楚如何以一种可以将它们与原始方程联系起来的方式放入约束。我是 matlab 新手,无法弄清楚这一点。
提前致谢!
正如@Franck 提到的,您通常可以fmincon
用来解决优化问题。但是,由于您的问题只是一个线性规划问题,因此解决方案要简单得多(并且保证是最优的):
f = -[3 1]; % Note the minus as we want maximization
A = [2 1; 1 3];
b = [6; 9];
LB = [0 0];
[X, FVAL] = linprog(f,A,b,[],[],LB)
会给:
X =
3.0000
0.0000
FVAL =
-9.0000
因此,在点 (3,0) 处找到最优值,结果值为 9。
尝试help linprog
阅读更多关于这个非常有用的功能。
创建以下文件并运行 Maximize_stuff:
最大化stuff.m:
function [] = maximize_stuff()
x0 = [2 2]; % fmincon starts at X0 and finds a minimum X
[x,fval] = fmincon('objfun',x0,[],[],[],[],[0;0],[Inf;Inf],'constraint');
fval = -fval; % Because we want to find the maximum, not the minimum
x
fval
end
objfun.m
function f=objfun(x)
f = 3*x(1) + x(2);
f = -f; % Because we want to find the maximum, not the minimum
end
约束.m:
function [c,ceq]=constraint(x)
c1 = 2 * x(1) + x(2) - 6;
c2= x(1) + 3*x(2) - 9;
c = [c1;c2];
ceq = [];
end
它应该返回:
>> maximize_stuff
Local minimum found that satisfies the constraints.
Optimization completed because the objective function is non-decreasing in
feasible directions, to within the default value of the function tolerance,
and constraints are satisfied to within the default value of the constraint tolerance.
<stopping criteria details>
Active inequalities (to within options.TolCon = 1e-06):
lower upper ineqlin ineqnonlin
2 1
x =
3.0000 0
fval =
9.0000
您可以验证结果 http://www.wolframalpha.com/input/?i=2x%2By%3C%3D6%3B+x%2B3y%3C%3D9%3B+x%3E%3D0%3By%3E% 3D0%3B:
一个很好的教程: http: //www.math.colostate.edu/~gerhard/classes/331/lab/fmincon.html
fmincon 调用如下:
仅具有线性不等式约束 Ax£b(如在 linprog 中): [x,fval]=fmincon('objfun',x0,A,b)
仅具有线性不等式约束和线性等式约束 Aeq·x=beq: [x,fval]=fmincon('objfun',x0,A,b,Aeq,beq)
具有线性不等式和等式约束,此外还有 x³lb 形式的下限:[x,fval]=fmincon('objfun',x0,A,b,Aeq,beq,lb) 如果只有变量的一个子集有下界,没有下界的变量对应的lb的分量是-Inf。例如,如果变量是 (x,y),并且 x³1 但 y 没有下限,则 lb=[1;-Inf]。
具有线性不等式和等式约束,并且只有 x£ub 形式的下限和上限: [x,fval]=fmincon('objfun',x0,A,b,Aeq,beq,lb,ub) 如果只有变量的一个子集有一个上界,对应于没有上界的变量的 ub 的分量是 Inf。例如,如果变量是 (x,y) 和 x£1 但 y 没有下限,则 lb=[1;Inf]。
具有线性不等式和等式约束、下界和上界以及非线性不等式和等式约束: [x,fval]=fmincon('objfun',x0,A,b,Aeq,beq,lb,ub,'constraint')此调用中的最后一个输入参数是函数文件的名称(在这些注释中表示约束并在工作目录中保存为约束.m),其中编码了非线性约束。