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

这篇具有很好参考价值的文章主要介绍了基于python的pulp库使用,从基础模型到复杂模型,从一维变量到二维变量。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前面

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

参考

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

步骤

1、安装PuLp (pip install pulp)

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

3、定义线性规划问题

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

4、定义决策变量

小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)

5、添加目标函数

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

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

6、添加约束条件

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

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)  # 等式约束
"""

7、写入LP文件PB.writeLP ( filename )

8、模型求解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))  #输出最优解的目标函数值    

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

栗子1 单个变量

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

import pulp as pl
def 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友情提供

基于python的pulp库使用,从基础模型到复杂模型,从一维变量到二维变量文章来源地址https://www.toymoban.com/news/detail-479176.html

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))

到了这里,关于基于python的pulp库使用,从基础模型到复杂模型,从一维变量到二维变量的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SuperMap三维复杂模型建模之3D极坐标建模——基础篇

    作者:超图研究院技术支持中心-于丁 SuperMap三维复杂模型建模之3D极坐标建模——基础篇 在上一篇文章中我们了解了曲面建模(UV极坐标下)的基础原理,这篇文章便带领大家进行3D极坐标建模的简单使用和参数了解,上手该功能。 一、所需工具 1、 SuperMap iDesktop 10i(2021)V10

    2024年01月18日
    浏览(28)
  • 一维连续型随机变量函数的分布例题(一)

    设随机变量X的概率密度为,求Y=2X+8的概率密度。 令g(x)=Y,即g(x)=2X+8。我们可以得到Y的值域为(8,16)。  方法一:看看Y是不是单调可导的函数 此处Y单调可导。 然后求Y的反函数,即。再对h(x)求导可得。 再由公式我们可得 再补上定义域即可得到 方法二:如果Y不可导 那就用定

    2024年02月16日
    浏览(25)
  • 解密Prompt系列9. 模型复杂推理-思维链COT基础和进阶玩法

    终于写了一篇和系列标题沾边的博客,这一篇真的是解密prompt!我们会讨论下思维链(chain-of-Thought)提示词究竟要如何写,如何写的更高级。COT其实是Self-ASK,ReACT等利用大模型进行工具调用方案的底层逻辑,因此在Agent调用章节之前我们会有两章来讲思维链 先打预防针,COT当前

    2024年02月09日
    浏览(27)
  • PT_二维随机变量:正态分布的可加性/一维随机变量函数与正态分布

    一维随机变量函数与正态分布 PT_随机变量函数的分布_随机变量线性函数的正态分布_xuchaoxin1375的博客-CSDN博客 🎈正态分布的可加性 区别于一维随机变量的函数的正态分布的规律,多维随机变量(各个分量相互独立同分布)具有不同的规律 在一维的情况中, X ∼ N ( μ , σ 2 ) , 则

    2023年04月25日
    浏览(44)
  • 【python基础】复杂数据类型-字典(嵌套)

    有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为 嵌套 。我们可以在列表中嵌套字典、在字典中嵌套列表、在字典中嵌套字典。 我们可以把一个人的信息放在字典中,但是多个人的信息我们无法放在同一个字典中,所以就需要字典列表。 其语

    2024年02月08日
    浏览(30)
  • 【python基础】复杂数据类型-字典(遍历)

    一个字典可能只包含几个键值对,也可能包含数百万个键值对,所以Python支持字典遍历。字典可用于以各种方式存储信息,因此有多种遍历字典的方式:可遍历字典的所有键值对、键或值。 其语法格式: 比如遍历一个人的信息,编写程序如下所示: 这里,我们给键起了一个

    2024年02月08日
    浏览(39)
  • 【考研数学】概率论与数理统计 —— 第二章 | 一维随机变量及其分布(2,常见随机变量及其分布 | 随机变量函数的分布)

    承接前文,我们继续学习第二章,一维随机变量及其分布的第二部分内容。 (一)(0-1)分布 设随机变量 X X X 的可能取值为 0 或 1 ,且其概率为 P P P { X = 1 X=1 X = 1 } = p , =p, = p , P P P { X = 0 X=0 X = 0 } = 1 − p ( 0 p 1 =1-p(0 p 1 = 1 − p ( 0 p 1 ,称 X X X 服从(0-1)分布,记为 X ∼ B

    2024年02月11日
    浏览(31)
  • 入门孪生网络3-------使用一维卷积神经网络1DCNN与孪生网络的组合模型来实现excel数据的分类

    读取数据:使用NumPy加载数据文件(假设为\\\" data.csv \\\"),并将其分为训练集和测试集。 定义1D卷积神经网络模型:通过创建get_cnn_model()函数来定义1DCNN模型,该模型包括一系列卷积层和池化层,以及最后的全连接层输出。这个模型将用于构建孪生网络模型的多个分支。 定义孪

    2024年02月09日
    浏览(40)
  • 【python基础】复杂数据类型-列表类型(元组)

    列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的。 然而,有时候需要创建一系列不可修改的元素,元组可以满足这种需求 python将不能修改的值称为不可变的,而不可变的列表被称为元组。 元组看起来犹如列表,但使用圆括号而不是方括号来标识

    2024年02月07日
    浏览(54)
  • 【考研数学】概率论与数理统计 —— 第二章 | 一维随机变量及其分布(1,基本概念与随机变量常见类型)

    暑假接近尾声了,争取赶一点概率论部分的进度。 设随机试验 E E E 的样本空间为 Ω Omega Ω , X X X 为定义于样本空间 Ω Omega Ω 上的函数,对于任意 w ∈ Ω w in Omega w ∈ Ω ,总存在唯一确定的 X ( w ) X(w) X ( w ) 与之对应,称 X ( w ) X(w) X ( w ) 为随机变量,一般记为 X X X 。 随机

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包