【规划问题】-------线性规划

线性规划可以说是规划问题里最简单的一种规划了, 他没有太多的细节分类, 其特点就是 : 目标函数, 约束条件都是线性方程(一次方程), 然后求目标函数的最大最小值,通常解决生产计划问题和运输问题;


三个基本要素

1、决策变量(decision variables);
2、约束条件(constraints);
3、目标函数(objective function)

matlab里linprog函数

在matlab里标准格式为:
min  f' . x
s.t.
               A·x <= b
              Aeq·x = beq
              lb <= x <= ub
其中 ,b,beq均为向量,A,Aeq为矩阵,x为向量变量.矩阵A和向量b是线性不等式约束条件的系数, Aeq和beq是等式约束条件的系数.

linprog函数的使用
x = linprog(f,   A, b,  Aeq,beq ,lb, ub)  //这里面传参都直接传列向量
PS:如果建模与标准形式不同则左右乘以-1让   >= 变成 <= 就好了,同理 max 变 min, 如果没有等式限制把Aeq,beq用[][],代替就好

在ACM/ICPC解决方法通常是利用差分约束算法进行解决, 而在数模竞赛则注重解决实际问题,所以在matlab里也提供了相关函数供大家使用,此文主要用matlab解决一系列问题

例1:                    
max    P=5 X1 + 3 X2
s.t.       2 X1 + X2 ≤ 40 
            X1 + 2 X2 ≤ 50
            X1≥0, X2≥0
     
 f = -[5; 3];
 A = [2, 1; 1, 2];
 b = [40; 50];
 lb = zeros(2, 1);
[x, ans] = linprog(f, A, b,[],[],lb);
 x, ans = -ans
输出:x =
   10.0000
   20.0000
ans =
    110.0000
例2:
min z = |x1| + 2*|x2| + 3*|x3| + 4*|x4|,
s.t.   x1 - x2 - x3 +x4 <= -2;
        x1 - x2 +x3 -3*x4 <= -1;
x1 - x2 - 2* x3 +3* x4 <= -0.5;
解析参照数学建模算法与应用(司守奎版)P4页;
定理:
对于任意的x,存在u,v大于0,满足 x = u - v, |x| = u + v; 只要让 u = (x - |x|)/2; v = (|x| - x)/2;就好
代码:
 f = 1:4;
f = [f, f]';
A = [1, -1, -1, 1; 1, -1, 1, -3; 1, -1, -2, 3];
b = [-2, -1, -0.5];
A = [A, -A];
lb = zeros(8, 1);
[x, ans] = linprog(f, A, b, [],[], lb);
ans, y = x(1:4) - x(5:end)

输出:
ans =
    2.0000
y =
   -2.0000
    0.0000
    0.0000
    0.0000
  数学建模算法与应用(司守奎版)P6页模型一代码
a = 0;
hold on;
while a < 0.05
f = -[0.05; 0.27; 0.19; 0.185; 0.185];
A = [zeros(4, 1), diag([0.025, 0.015, 0.055, 0.026])];
b = a * ones(4, 1);
Aeq = [1, 1.01, 1.02, 1.045, 1.065];
beq = 1;
lb = zeros(5, 1);
[x, ans] = linprog(f, A, b, Aeq, beq, lb);
ans = -ans;
plot(a, ans, ' *k');
a = a + 0.001;
end






你可能感兴趣的:(数学建模相关算法研究)