第四章 数学规划模型

第四章 数学规划模型

已经初步了解过线性规划,在对决策变量的取值范围有范围限制条件下求目标值。

实际问题中通常有多个决策变量,可行域复杂;目标函数也是多元函数,模型通常表示为
m i n ( m a x )   z = f ( x ) s . t .   g i ( x ) ≤ 0 ( 也 可 以 为 等 式 ) , i = 1 , 2 , ⋅ ⋅ ⋅ ⋅ m min(max)\ z=f(x) \\s.t.\ g_i(x)≤0(也可以为等式),i=1,2,····m min(max) z=f(x)s.t. gi(x)0(),i=1,2,m
规划模型有线性规划、非线性规划;当约束条件中限制x为整数,称为整数规划。

使用LINGO软件编程求解

LINGO软件的使用


1.货机货运 线性规划

问题

某架货机有三个货舱:前舱、中舱、后舱。三个货舱所能装载的货物的最大质量和体积都有限制。并且为了保持飞机平衡,三个货舱中实际装载货物的质量必须与其最大容许质量成比例。

在这里插入图片描述

四类货物由该货机装运

在这里插入图片描述

如何安排使本次飞行货运利润最大?(假设每种货物可以任意分割混装不留空隙)

模型建立

规划模型首先确定决策变量,设置合理的表示方法便于软件求解

决策变量:用xij表示第i种货物装入第j个货舱的质量,j=1,2,3 i=1,2,3,4

已知参数:货舱质量限制weight,体积限制vol;第i种货物的质量wi,单位质量的体积vi,利润pi

行向量表示

weight=(10,16,8)

vol=(6800,8700,5300)

w=(18,15,23,12)

v=(480,650,580,390)

p=(3100,3800,3500,2850)

目标函数,总利润最大化
m a x   z = ∑ i = 1 4 p i ( ∑ j = 1 3 x i j ) max\ z=\sum_{i=1}^{4}{p_i(\sum_{j=1}^3x_{ij})} max z=i=14pi(j=13xij)
约束条件,四个方面:货物质量约束、货舱质量约束、空间限制、质量平衡约束。
∑ j = 1 3 x i j ≤ w i , i = 1 , 2 , 3 , 4 ∑ i = 1 4 x i j ≤ w e i g h t j , j = 1 , 2 , 3 ∑ i = 1 4 v i x i j ≤ v o l i , j = 1 , 2 , 3 ∑ i = 1 4 x i j / w e i g h t j = ∑ i = 1 4 x i k / w e i g h t k , i ≠ k \sum_{j=1}^3x_{ij}\le w_i,i=1,2,3,4\\\sum_{i=1}^4x_{ij}\le weight_j,j=1,2,3\\\sum_{i=1}^4v_ix_{ij}\le vol_i,j=1,2,3\\\sum_{i=1}^4x_{ij}/weight_j=\sum_{i=1}^4x_{ik}/weight_k,i\ne k j=13xijwi,i=1,2,3,4i=14xijweightj,j=1,2,3i=14vixijvoli,j=1,2,3i=14xij/weightj=i=14xik/weightk,i=k

模型求解

程序如下,输入Lingo软件中得到结果,着重理解@for函数的用法,类似C语言的for循环

model:
sets:
cang/1..3/:vol,weight;
wu/1..4/:w,v,p;
link(wu,cang):x;
endsets
data:
weight=10,16,8;
vol=6800,8700,5300;
w=18,15,23,12;
v=480,650,580,390;
p=3100,3800,3500,2850;
enddata
max=@sum(wu(i):p(i)*@sum(cang(j):x(i,j)));
@for(wu(i):@sum(cang(j):x(i,j))<w(i));
@for(cang(j):@sum(wu(i):x(i,j))<weight(j));
@for(cang(j):@sum(wu(i):x(i,j)*v(i))<vol(j));
@for(cang(j):
@for(cang(k)|k#gt#j:
@sum(wu(i):x(i,j)/weight(j))=@sum(wu(i):x(i,k)/weight(k))););

2.汽车生产与原油采购与加工 整数规划与非线性规划

汽车生产 限制问题的三种处理方式

针对问题“如果要生产某一类型的汽车,则至少生产80辆”的限制,列出3种求解模型:

  1. 分解为多个LP模型 不推荐

  2. 引入0-1变量
    设y只取0,1两个值,则“x=0或x>80”等价于
    80 y < x < M y , y ∈ { 0 , 1 } , M 为 足 够 大 的 正 数 80y<x<My,y∈\{0,1\},M为足够大的正数 80y<x<My,y{0,1},M

  3. 化为非线性规划
    x ( x − 80 ) > 0 x(x-80)>0 x(x80)>0
    非线性规划得到的数据一般为局部最优解,求解困难,尽量不用非线性规划

原油采购与加工 分段线性函数的三种处理方式

由于求解模型的c(x)不是线性函数,非线性规划软件难以输入和求解,因此需要方法化简
c ( x ) = { 10 x   , 0 ≤ x ≤ 500 1000 + 8 x   , 500 ≤ x ≤ 1000 3000 + 6 x   , 1000 ≤ x ≤ 1500 c(x)=\begin{cases}10x\ ,0\le x\le 500 \\ 1000+8x\ ,500\le x\le 1000 \\ 3000+6x\ ,1000\le x\le 1500\end{cases} c(x)=10x ,0x5001000+8x ,500x10003000+6x ,1000x1500
三种解法

  1. 把x分解为3个量,x1、x2、x3,分别表示0到500的量,超出500而小于1000的量,超出1000小于1500的部分
    c ( x ) = 10 x 1 + 8 x 2 + 6 x 3 c(x)=10x_1+8x_2+6x_3 c(x)=10x1+8x2+6x3
    有因为只有当x1=500时,才能有x2不为零,这个关系可以表示为
    ( x 1 − 500 ) x 2 = 0 (x_1-500)x_2=0 (x1500)x2=0
    同理
    ( x 2 − 500 ) x 3 = 0 (x_2-500)x_3=0 (x2500)x3=0
    取值范围
    [ 0 , 500 ] [0,500] [0,500]
    这样就构成了非线性模型,但是得到为是局部最优解,需要调整设置。

  2. 引入0-1变量转化为线性约束
    设y1、y2、y3为0-1变量,可以将上述的非线性约束转化
    500 y 2 ≤ x 1 ≤ 500 y 1 500 y 3 ≤ x 1 ≤ 500 y 2 x 3 ≤ 500 y 3 y 1 , y 2 , y 3 = 0 或 1 500y_2\le x_1\le 500y_1\\500y_3\le x_1\le 500y_2\\x_3\le500y_3\\y_1,y_2,y_3=0或1 500y2x1500y1500y3x1500y2x3500y3y1,y2,y3=01
    得到的是全局最优解

  3. 直接处理分段线性函数
    在这里插入图片描述

    Model:
    sets:
    !设置点集合,b为分点对应自变量,c为分点对应函数值,y为0-1变量,z为所引入自变量
    points/1..4/: b, c, y, z;
    endsets
    data:
    !数据设置,实例数据
    n=3;
    b=0 500 1000 1500;
    c=0 5000 9000 12000;
    enddata
    !实例的目标函数,@sum(points:c*z)就是c(x)用引入量z的表示 (32)式
    Max=4.8*x11 + 4.8*x21 + 5.6*x12 + 5.6*x22 - @sum(points: c*z);
    !其他约束
    x11+x12 < x + 500;
    x21+x22 < 1000;
    0.5*x11 - 0.5*x21 > 0;  
    0.4*x12 - 0.6*x22 > 0;
    !引入量的约束
    @for(points(k)|(k#NE#1)#AND#(k#NE#(n+1)):
    	z(k) < y(k-1) + y(k); 
    );
    z(1)<y(1);
    z(n+1)<y(n);
    x= @sum(points: b*z);  
    @sum(points: z) = 1;  
    @sum(points: y) = 1;  
    @for(points:@bin(y););
    end
    
    

3.接力队的选拔与选课策略 指派问题与(单\多)目标规划

指派问题

指派问题通常使用0-1规划模型解决,1为指派,0为未指派

讨论题:注意的是整数规划模型,与线性规划不同,LINGO 输出的敏感性分析结果通常没有意义

选课策略

不同学生选课的目标不同,有的希望选修课程数量少,有的希望学分多,而有的希望课程数量少,学分尽可能多,此时就存在一个单目标规划与多目标规划的问题。

设课程数量为z,获得学分为w,多目标的规划函数相当于一个向量
V − m i n ( z , − w ) V − m i n 表 示 向 量 最 小 化 , w 取 负 号 , 最 大 化 问 题 变 成 最 小 化 V-min(z,-w)\\V-min 表示向量最小化,w取负号,最大化问题变成最小化 Vmin(z,w)Vminw
多目标规划需要根据决策者对各个目标的重视程度,赋予不同的权重值

4.生产批量问题

既包含可变费用(生产成本、存贮费)又包含固定费用(生产准备费)的生产计划问题成为生产批量问题,通常引入0-1变量来处理。

满足市场需求条件下,生产总费用最小

数学符号表述这类问题

时间跨度为T个时间段

在第t时段内,市场需求为dt,生产能力Mt,生产准备费st,单件产品生产成本ct,单件产品存贮费为ht

假设t时段内,产品生产量为xt,t时段末产品库存为yt

引入0-1变量wt,1表示生产,0表示不生产

数学规划模型表示
m i n   z = ∑ t = 1 T ( s t w t + c t x t + h t y t ) s . t .   y t − 1 + x t − y t = d t x ≤ M t w t y 0 = y T = 0 x t , y t ≥ 0 ( t = 1 , 2 ⋅ ⋅ ⋅ , T ) min\ z=\sum_{t=1}^T(s_tw_t+c_tx_t+h_ty_t)\\s.t.\ y_{t-1}+x_t-y_t=d_t\\x\le M_tw_t\\y_0=y_T=0\\x_t,y_t\ge0\\(t=1,2···,T) min z=t=1T(stwt+ctxt+htyt)s.t. yt1+xtyt=dtxMtwty0=yT=0xt,yt0(t=1,2,T)

5.原料下料问题

下料问题的建模主要由两部分组成,一是下料模式,二是构造优化模型

6.多目标规划 目标规划模型

多目标规划的求解

  1. 引入相应权重,对多个目标进行加权,得到单一目标函数
  2. 将多个目标中的一个作为目标函数,而将其他的目标以约束形式体现,然后对单目标规划问题求解得到一个非劣解。然后对目标设定不同的上(下)界约束,得到有效前沿

目标规划的求解

通常用P1≥P2···表示目标的优先级。可以按照最高优先级的目标进行求解,然后将该目标取到相应的最优值加入到约束中,再按照次高优先级的目标进行求解;依次进行直到最后最低优先级的目标求解。

7.投资组合 风险与收益

风险用收益的方差来衡量。LINGO 程序

! 4.8节例1(投资组合);
MODEL:
Title 简单的投资组合模型;
SETS:
   YEAR/1..12/;
   STOCKS/ A,  B,  C/: Mean,X;
   link(YEAR, STOCKS): R;
   STST(Stocks,stocks): COV;
ENDSETS
DATA:
   TARGET = 1.15;
! R是原始数据;
   R =
    1.300    1.225    1.149
    1.103    1.290    1.260
    1.216    1.216    1.419
    0.954    0.728    0.922
    0.929    1.144    1.169
    1.056    1.107    0.965
    1.038    1.321    1.133
    1.089    1.305    1.732
    1.090    1.195    1.021
    1.083    1.390    1.131
    1.035    0.928    1.006
    1.176    1.715    1.908;
ENDDATA
CALC:	!计算均值向量Mean与协方差矩阵COV;
@for(stocks(i): Mean(i) =
			@sum(year(j): R(j,i)) / @size(year) ); 
@for(stst(i,j): COV(i,j) = @sum(year(k): 
(R(k,i)-mean(i))*(R(k,j)-mean(j))) / (@size(year)-1) );
ENDCALC
[OBJ] MIN = @sum(STST(i,j): COV(i,j)*x(i)*x(j));
[ONE] @SUM(STOCKS: X) = 1;
[TWO] @SUM(stocks: mean*x) >= TARGET;
END
  • 1
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值