一.线性规划与单纯形法
1.一般线性规划的数学模型
2.线性规划模型的三要素:
决策变量, 目标函数, 约束条件
3.线性规划问题的标准形式:
标准形式中
1.目标函数为求极大值
2.约束条件为全等式
3.约束条件右端的常数为非复值
4.变量为非负值
4.如何将线性规划问题化为标准形式
1.若目标函数为求极小值
min (z) 等价为 max (-z)
2.若约束条件为不等式
在不等式左边加入松弛变量或者剩余变量
并且它们在目标函数中的系数为0
3.若约束条件右端为b<0
将不等式两端同时乘(-1)
4.若变量为无约束
令
其中
5.对于变量为负数
令
![]()
参考例题:
5.什么时候可以用到线性/整数规划
当题中出现例如样安排最合理,如何最大化,最小化...
具体有如下几种:
1). 生产安排
目标:如何使得总利润最大,如何使得成本最小;
约束:原料、工人、时间、设备限制;
2). 销售运输
目标:如何使得运输成本最低;
约束:由产地运往不同销地的运价,产销不平衡等;
3). 投资收益
目标:总收益最大;
约束:不同资产配置下收益率不同,总资金有限;
对于整数规划,除了通常要求变量为整数外,典型的还有指派/背包等问题(决策变量有0-1变量)。
6.线性规划问题的求解
1)图解法
图解法步骤:
建立直角坐标系,根据约束条件划分可行域,利用目标函数寻找最优解
最终的解可能出现的情况:
无穷多最优解(目标函数直线与约束条件平行),无界解(可能是缺少了某个约束条件),无解(不存在满足约束条件的可行域)
2)单纯形法
2.1)单纯形原理
对于一个标准形式的线性规划问题
可行解:满足所有约束条件的解
可行域:可行解的集合
最优解:使目标函数取得最大值的可行解
基:记A为约束方程为m*n的矩阵(n>m),B为m*m的满秩子矩阵, 则B为该线性规划问题的一个基
基解:在约束方程中令非基变量为0,求解m*m矩阵B基变量的解X = x1,x2,...xm,将其加上非基变量的0的值,称为线性规划的基解,基解的个数不超过
基可行解:满足非负约束条件的基解
可行基:对应于基可行解的基
凸集:若集合中的两个点,它们连线上的点依旧在这个集合中,则这个集合成为凸集
连线可表示为
顶点:不存在
使得其等于
,这样的点成为顶点
2.2)单纯形法的计算步骤
1.首先将非标准型的线性规划问题转换为线性规划问题
2.列出初始单纯形表格
3.求出初始基可行解
4.最优性检验
5.换入换出变量构造新的单纯形表
6.不断重复,直到符合条件最优性
2.3)单纯形法的进一步讨论
1.大M法
2.两阶段法
3)程序求解
3.1 Matlab求解线性规划问题:
f = [-2; -3; 5];
a = [-2, 5, -1; 1, 3, 1];
b = [-10; 12];
aeq = [1, 1, 1];
beq = 7;
[x, y] = linprog(f, a, b, aeq, beq, zeros(3, 1));
x; y = -y;
Lingo代码求解线性规划问题:
例一:
max z = 72*x1 + 64*x2
x1 + x2 <= 50
12*x1 + 8*x2 <= 480
3*x1 <= 100
x1, x2 >= 0
未标准化:
model:
sets:
var/1..2/:x;
endsets
max = 72*x(1)+64*x(2);
x(1)+x(2) <= 50;
12*x(1)+8*x(2)<=480;
3*x(1)<=100;
end
标准化:(引入松弛变量)
max z = 72*x1 + 64*x2 +0*x3 +0*x4 +0*x5
x1 + x2 + x3 = 50
12*x1 + 8*x2 + x4 = 480
3*x1 + x5 = 100
x1, x2 , x3, x4, x5 >= 0
model:
sets:
var_name/1..5/:c, x;
const_name/1..3/: b;
matrix(const_name, var_name): A;! 3*5的A;
endsets
max = @sum(var_name: c*x);
@for(const_name(i):
@sum(var_name(j): A(i,j)*x(j))=b(i));
data:
c = 72, 64, 0, 0, 0;
b = 50, 480, 100;
A = 1, 1, 1, 0, 0,
12, 8, 0, 1, 0,
3, 0, 0, 0, 1;
enddata
end
二. 整数规划的一般形式:
为整数
整数规划一般的求解方法:
分枝定界法——可求完全或混合整数线性规划
割平面法——可求完全或混合整数线性规划
隐枚举法——求解“0-1”整数规划
匈牙利法——解决指派问题
蒙特卡洛法——求解各种类型规划
相互排斥的变量,可以引入一个M(充分大的数)放在约束条件中,使得其两个约束条件始终成立
整数规划问题的求解:
lingo求解:(钢管下料问题)
model:
sets:
var_name/1..7/:c, x;
const_name/1..3/: b;
matrix(const_name, var_name): A;
endsets
max = @sum(var_name: c*x);
@for(const_name(i):
@sum(var_name(j): A(i,j)*x(j))=b(i));
@for(var_name:@gin(x));
data:
c = 3, 1, 3, 3, 1, 1, 3;
b = 50, 20, 15;
A = 4, 3, 2, 1, 1, 0, 0,
0, 1, 0, 2, 1, 3, 0,
0, 0, 1, 0, 1, 0, 2;
enddata
end