数学建模part(2):整数,非线性规划

🌅整数规划

🧠本篇只包含软件求解,算法尚未了解

整数规划:数学规划中的变量限制为整数

  • 纯整数规划 :决策变量都是整数
    • 0-1整数规划 (指派问题)
  • 混合整数规划:部分决策变量取整数
    • 混合0-1整数规划
  • 整数规划特点:
    • 原线性规划最优解为整数,则整数规划最优解与之一致
    • 原线性规划有最优解,整数规划未必有可行解
  • 求解算法:
    • 分枝定界法:纯或混合整数规划✅
    • 割平面法:纯或混合整数规划✅
    • 隐枚举法 :求解0-1整数规划
      • 过滤隐枚举法
      • 分枝隐枚举法
    • 匈牙利法(指派问题:0-1整数规划)
    • Monte Carlo 法:求解各种类型规划

求解整数规划

  • lingo 🎯

    • @bin(x(k)) 0-1整数
    • @gin(x(k)) 限制为整数
  • python cvxpy

    • 设置决策变量为整数
    x=cp.Variable(2,integer=True)#将2个决策变量设置为整数
    
    • 对于0-1 整数规划:
    constrain=[x>=0,x<=1,...]#注意声明的x的维度
    
  • matlab (对应的数学模型):
    m a x   z = f T x x ( i n t c o n ) 为整数 s . t . { A x ≤ b , A e q ⋅ x = b e q , l b ≤ x ≤ u b . max~z=f^Tx\\ x(intcon)为整数\\ s.t.\left\{ \begin{aligned} &Ax\le b,\\ &Aeq\cdot x=beq,\\ &lb\le x\le ub. \end{aligned} \right. max z=fTxx(intcon)为整数s.t. Axb,Aeqx=beq,lbxub.

    • 调用函数intlinprog()必须要把高维决策变量转化为一维决策变量

    • 可以据此求解混合整数规划(未必有可行解)

    [x,fval]=intlinprog(f,intction,A,b,Aeq,beq,lb,ub)
    %f 为价值系数
    %inction :一维向量,向量元素指的是作为整数的决策变量 如:1:3(x1,x2,x3为整数)
    %对于0-1整数规划可以在lb,ub进行限制(zeros(n,1),ones(n,1))
    

互斥约束条件

m个互斥的约束条件:

a i 1 x 1 + ⋯ + a i n x n ≤ b i , i = 1 , 2 , … , m a_{i1}x_1+\dots+a_{in}x_n\le b_i,i=1,2,\dots,m ai1x1++ainxnbi,i=1,2,,m ,但这m个互斥的条件只有一个起作用,引入m个0-1变量y

约束条件变形为:

a i 1 x 1 + ⋯ + a i n x n ≤ b i + ( 1 − y i ) M , i = 1 , 2 , … , m a_{i1}x_1+\dots+a_{in}x_n\le b_i+(1-y_i)M,i=1,2,\dots,m ai1x1++ainxnbi+(1yi)M,i=1,2,,m

∑ i = 1 m y i = 1 \sum_{i=1}^{m}y_i=1 i=1myi=1

其中M趋近与 ∞ \infty ,所以这m个 y i y_i yi只能有一个取1(因为和为1),而其他取0后等式的右边都趋于 ∞ \infty ,该约束失效

固定费用问题

目标函数在变化,会随着决策变量的改变而发生变化

i = 1 , 2 , ⋯   , n i=1,2,\cdots,n i=1,2,,n 代表n种生产方式

x i x_i xi表示采用第 i i i种生产方式的产量

c i c_i ci表示采用第 i i i种方式时的变动成本

k i k_i ki表示采用第 i i i种方式时的固定成本

所以采用各种方式的总成本为:
P i = { k i + c i x i , 当 x i > 0 , 0 ,   当 x i = 0 , i = 1 , 2 , … , n P_i=\left\{ \begin{aligned} &k_i+c_ix_i,当x_i>0,\\ &0,\quad\quad\quad~~当x_i=0,i=1,2,\dots,n\\ \end{aligned} \right. Pi={ ki+cixi,xi>0,0,  xi=0,i=1,2,,n
y i y_i yi取0或1代表(不)采用第 i种生产方式

所以目标函数: m i n   z = ( k 1 y 1 + c 1 x 1 ) + ⋯ + ( k n y n + c n x n ) min~z=(k_1y_1+c_1x_1)+\dots+(k_ny_n+c_nx_n) min z=(k1y1+c1x1)++(knyn+cn<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值