3

我需要在 matlab 中使用以下约束最大化方程 3x+y:

2x+y<=6, x+3y<=9, 和 x,y>=0

我很难弄清楚如何以一种可以将它们与原始方程联系起来的方式放入约束。我是 matlab 新手,无法弄清楚这一点。

提前致谢!

4

2 回答 2

5

正如@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阅读更多关于这个非常有用的功能。

于 2013-09-30T09:37:02.857 回答
2

创建以下文件并运行 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),其中编码了非线性约束。

于 2013-09-30T04:03:56.673 回答