对于了解线性规划的人来说,这可能是一个非常基本的问题
我在LP上看到的大多数问题都与以下格式有些相似
max 3x+4y
subject to 4x-5y = -34
3x-5y = 10 (and similar other constraints)
换句话说,我们在目标和约束函数中有相同数量的未知。
我的问题是我在目标函数中有一个未知变量,在约束函数中有3个未知数 问题就像这样
Objective function: min w1
subject to:
w1 + 0.1676x + 0.1692y >= 0.1666
w1 - 0.1676x - 0.1692y >= -0.1666
w1 + 0.3039x + 0.3058y >= 0.3
w1 - 0.3039x - 0.3058y >= -0.3
x + y = 1
x >= 0
y >= 0
可以看出,目标函数只有一个未知,即 w1 ,约束函数有3个(或者说2个)未知,即 w1,x 和ÿ即可。
有人可以指导我如何解决这个问题,特别是使用R或MATLAB线性编程工具箱。
答案 0 :(得分:4)
您的目标仅涉及w1
,但您仍然可以将其视为w1,x,y
的函数,w1
的系数为1,x,y
的系数为min w1*1 + x*0 + y*0
。零:
{{1}}
一旦你看到了这一点,就可以按照通常的方式将其制定为“标准”LP。
答案 1 :(得分:2)
普拉萨德是对的。目标函数中的未知数无关紧要。您可以查看不存在的未知数为零系数的未知数。
使用Matlab的linprog
函数可以轻松解决此LP问题。更多
有关linprog
的详细信息,请参阅文档here。
% We lay out the variables as X = [w1; x; y]
c = [1; 0; 0]; % The objective is w1 = c'*X
% Construct the constraint matrix
% Inequality constraints will be written as Ain*X <= bin
% w1 x y
Ain = [ -1 -0.1676 -0.1692;
-1 0.1676 0.1692;
-1 -0.3039 -0.3058;
-1 0.3039 0.3058;
];
bin = [ -0.166; 0.166; -0.3; 0.3];
% Construct equality constraints Aeq*X == beq
Aeq = [ 0 1 1];
beq = 1;
%Construct lower and upper bounds l <= X <= u
l = [ -inf; 0; 0];
u = inf(3,1);
% Solve the LP using linprog
[X, optval] = linprog(c,Ain,bin,Aeq,beq,l,u);
% Extract the solution
w1 = X(1);
x = X(2);
y = X(3);