python线性整数规划求解_Python Pulp包 整数线性规划

在学Optimisation的 时候用到了pulp包,在这里记录总结一下用法。

下面用两个例子来说明

物体移动最小距离问题

假设有n 个箱子和n个物体,箱子固定排列在x轴上,物体则分布在xy平面上,其中箱子和物体的初始位置均为已知。现要将物体放入箱子且使得每个箱子有且仅有一个物体,如何使得物体移动的距离最短?

可以定义

若物体j在箱子i中,否则为0,
为初始时物体j与箱子i间的距离, 则问题可以转变为

这是典型的整型规划问题,调用pulp包来解决

首先获取数据并得到距离矩阵M

import pulp as plp
import numpy as np

ca = open("PositionCasiers.txt")
ob = open("PositionObjets.txt")
clines = ca.readlines()[1:]
blines = ob.readlines()[1:]
nc = len(clines)
nb = len(blines)

# M est la matrice de distance pour bouger objet j dans la boîte i
M = np.zeros([nc,nb])

Cx = []
Cy = []
Ox = []
Oy = []
for i in range(nc):
    linec = clines[i].strip('n')
    linec = linec.split('t')
    cx = float(linec[0])
    cy = float(linec[1])
    Cx.append(cx)
    Cy.append(cy)
    
    for j in range(nb):
        lineb = blines[j].strip('n')
        lineb = lineb.split('t') 
        bx = float(lineb[0])
        by = float(lineb[1])
        Ox.append(bx)
        Oy.append(by)
        
        M[i,j] = np.sqrt((cx-bx)**2 + (cy-by)**2)

现在用c表示M矩阵,最后一行意思是将M写成问题数学描述里的

n = nc
m = nb
set_I = range(1, n+1)
set_J = range(1, m+1)
# c est le paramètre dans la formula 
c = {(i,j): M[i-1,j-1] for i in set_I for j in set_J}

定义解

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值