在Matlab中使用约束最大化3x + y

时间:2013-09-30 03:14:39

标签: matlab maximize

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

2×+ Y&LT; = 6, x + 3y <= 9,并且x,y> = 0

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

提前致谢!

2 个答案:

答案 0 :(得分: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阅读有关此非常有用的功能的更多信息。

答案 1 :(得分:2)

创建以下文件并运行maximize_stuff:

maximize_stuff.m:<​​/ p>

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

constraint.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

enter image description here

一个非常好的教程: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 only:[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   目录),其中非线性约束被编码。

  •