我的编程空间,编程开发者的网络收藏夹
学习永远不晚

基于python的pulp库使用,从基础模型到复杂模型,从一维变量到二维变量

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

基于python的pulp库使用,从基础模型到复杂模型,从一维变量到二维变量

写在前面

学习笔记,仅作参考。
个人觉得配合步骤和建模,直接看代码就能入门pulp,所以没有啥解释,见谅。

参考

https://blog.csdn.net/youcans/article/details/116371416

步骤

安装PuLp (pip install pulp)

导入PuLp (from pulp import * )或者(import pulp as pl)

定义线性规划问题

PB = LpProblem ( problem name , sense )"""problem name=问题名称sense=LpMinimize/LpMaximizee.g.  MyProbLP = pulp.LpProblem("LPProbDemo1", sense=pulp.LpMaximize)"""

定义决策变量

小tips

当约束条件需要变量大于某个数或小于某个数,用lowBound和upBound,不需要在约束条件中写!!!

DV = pulp.LPVariable ( decision variable name , lowbound , upbound ,category )"""DV=decision variable name:变量名,lowBound和upBound:下界和上界, 默认分别是负无穷到正无穷,参数 cat 用来设定变量类型,可选参数值:     ‘Continuous’ 表示连续变量(默认值)、     ’ Integer ’ 表示离散变量(用于整数规划问题)、     ’ Binary ’ 表示0/1变量(用于0/1规划问题)  """

根据变量类型可以做不一样的变量定义

单个变量

x1 = pulp.LpVariable('x1', lowBound=0, upBound=7, cat='Continuous')

一维变量

就是添加range(数组长度)

x = pl.LpVariable.dict("x",range(4),lowBound=0)

二维变量

y_ij=pl.LpVariable.dict("y_ij",(range(len1),(range(len2))),cat=pl.LpBinary)

添加目标函数

添加目标函数使用 “问题名 += 目标函数式” 格式。

PB += linear objective in equantion from objective name"""e.g. MyProbLP+= 2*x1 + 3*x2 - 5*x3    # 设置目标函数"""

添加约束条件

添加约束条件使用 “问题名 += (约束条件表达式)” 格式。

PB += linear objective in equantion from constraint name"""e.g.    MyProbLP+= (2*x1 - 5*x2 + x3 >= 10)  # 不等式约束    MyProbLP+= (x1 + 3*x2 + x3 <= 12)  # 不等式约束    MyProbLP+= (x1 + x2 + x3 == 7)  # 等式约束"""

写入LP文件PB.writeLP ( filename )

模型求解PB.slove ( )

    MyProbLP.solve()    print("Status:", pulp.LpStatus[MyProbLP.status]) # 输出求解状态    for v in MyProbLP.variables():        print(v.name, "=", v.varValue)  # 输出每个变量的最优值    print("F(x) = ", pulp.value(MyProbLP.objective))  #输出最优解的目标函数值    

结果显示check status : pulp.LpStatus[PB.status]

栗子1 单个变量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y3b6YruE-1669721947100)(https://secure2.wostatic.cn/static/jjyyyGCHDprcwkgmjZRbjN/image.png?auth_key=1669721877-vvFMhM4pkixDAeijcTk6Hs-0-f8f0ba7e3a193b52d6d4a1b89ffeea5a)]

import pulp as pldef rumen_1():    # 定义问题    et = pl.LpProblem("et", sense=pl.LpMinimize)    # 定义变量    x = pl.LpVariable("x", lowBound=0, cat="Integer ")    y = pl.LpVariable("y", lowBound=0, cat="Integer ")    z = pl.LpVariable("z", lowBound=0, cat="Integer ")    w = pl.LpVariable("w", lowBound=0, cat="Integer ")    # 添加目标函数    et += 5 * x + 6 * y + 7 * z + 8 * w    # 添加约束条件    et += (x + y + z + w == 100)    et += (5 * x + 4 * y + 5 * z + 6 * w >= 530)    et += (2 * x + y + z + 2 * w <= 160)    # 求解    et.solve()    for v in et.variables():        print(v.name, "=", v.varValue)    print("F(x)=", pl.value(et.objective))

栗子2 一维变量

同样用例1的模型

def rumen_2():    # 定义问题    et = pl.LpProblem("et", sense=pl.LpMinimize)    # 定义变量    x = pl.LpVariable.dict("x",range(4),lowBound=0)    # 添加目标函数    et += 5 * x[0] + 6 * x[1] + 7 * x[2] + 8 * x[3]    # 添加约束条件    et += (x[0] + x[1] + x[2] + x[3] == 100)    et += (5 * x[0] + 4 * x[1] + 5 * x[2] + 6 * x[3] >= 530)    et += (2 * x[0] + x[1] + x[2] + 2 * x[3] <= 160)    # 求解    et.solve()    for v in et.variables():        print(v.name, "=", v.varValue)    print("F(x)=", pl.value(et.objective))

栗子3 二维变量+复杂模型

此处模型感谢Cathy友情提供

在这里插入图片描述

def jinjie_1():    n = 200  # residential areas -变量i居民区数量    m = 40  # shelters-变量j庇护所数量    areas = range(n)    shelters = range(m)    path = 'Pb2_areas.csv'    areas_matrix = np.genfromtxt(path, dtype=float, delimiter=',', encoding='utf-8-sig')    path = 'Pb2_shelters.csv'    shelters_matrix = np.genfromtxt(path, dtype=float, delimiter=',', encoding='utf-8-sig')    R = areas_matrix[:, 2]  # 第三列的居民区居民数量-变量R_i    C = shelters_matrix[:, 2]  # 第三列的庇护所能庇护的容量-变量C_j    # 计算居民到庇护所的距离    D = np.zeros((n, m))  # -变量D_ij距离    for i in areas:        for j in shelters:            D[i, j] = abs(areas_matrix[i, 0] - shelters_matrix[j, 0]) + abs(areas_matrix[i, 1] - shelters_matrix[j, 1])    #定义问题    m=pl.LpProblem("Cathy_exp",sense=pl.LpMinimize)    #定义变量    x=pl.LpVariable.dict("x",areas,cat=pl.LpBinary)    y_ij=pl.LpVariable.dict("y_ij",(areas,shelters),cat=pl.LpBinary)    #目标函数    m+=pl.lpSum(pl.lpSum(D[i,j] * y_ij[i,j] for i in areas) for j in shelters)        #约束条件    m += (pl.lpSum(x[j] for j in shelters) == 10)    for i in areas:        m+=(pl.lpSum(y_ij[i,j] for j in shelters) == 1)    for j in shelters:        m+=(pl.lpSum(R[i] * y_ij[i,j] for i in areas) <= C[j] * x[j])    m.solve()    for v in m.variables():        print(v.name, "=", v.varValue)    print("F(x)=", pl.value(m.objective))

来源地址:https://blog.csdn.net/weixin_46967285/article/details/128103935

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

基于python的pulp库使用,从基础模型到复杂模型,从一维变量到二维变量

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录