python 之pulp 线性规划介绍及举例
pulp http://pythonhosted.org/PuLP/main/basic_python_coding.html
供水问题
1问题
供水公司有三个水库分别为A,B,C向四个小区甲乙丙丁供水,A和B向所有小区供水,C仅向甲乙丙供水,水库最大供水量(千吨)
|
水库 |
A |
B |
C |
|
最大供水量(千吨) |
50 |
60 |
50 |
小区用水情况为
|
小区 |
甲 |
乙 |
丙 |
丁 |
|
基本用水量(千吨) |
30 |
70 |
10 |
10 |
|
额外用水量(千吨) |
50 |
70 |
20 |
40 |
水库供水收入900元/千吨,支出费用为:其他费用450/千吨,引水管理费:
|
由水库到小区引水费用: 元/千吨 |
甲 |
乙 |
丙 |
丁 |
|
A |
160 |
130 |
220 |
170 |
|
B |
140 |
130 |
190 |
150 |
|
C |
190 |
200 |
230 |
问 如何分配水库供水量,公司才能获利最多。
2 解题思路
使引水管理费最小,则利润最高。
设:水库i向小区j的供水量为,总引水管理费为Z
目标函数为:z = 160.0*x11 + 130.0*x12 + 220.0*x13 + 170.0*x14 + 140.0*x21 + 130.0*x22 + 190.0*x23 + 150.0*x24 + 190.0*x31 + 200.0*x32 + 230.0*x33
求的值,使Z最小。
约束条件为:

# coding=utf-8 from pulp import * def get_re():
pass def getresult(c, con): # 设置对象
prob = LpProblem('myPro', LpMinimize)
# 设置三个变量,并设置变量最小取值 x11 = LpVariable("x11", lowBound=0)
x12 = LpVariable("x12", lowBound=0)
x13 = LpVariable("x13", lowBound=0)
x14 = LpVariable("x14", lowBound=0)
x21 = LpVariable("x21", lowBound=0)
x22 = LpVariable("x22", lowBound=0)
x23 = LpVariable("x23", lowBound=0)
x24 = LpVariable("x24", lowBound=0)
x31 = LpVariable("x31", lowBound=0)
x32 = LpVariable("x32", lowBound=0)
x33 = LpVariable("x33", lowBound=0) X = [x11, x12, x13, x14, x21, x22, x23, x24, x31, x32, x33] #c = [160, 130, 220, 170, 140, 130, 190, 150, 190, 200, 230] # 目标函数
z = 0
for i in range(len(X)):
z += X[i]*c[i]
#print(z)
prob += z # 载入约束变量
prob += x11+x12+x13+x14 == con[0]# 约束条件1
prob += x21+x22+x23+x24 == con[1]
prob += x31+x32+x33 == con[2] prob += x11+x21+x31 <= con[3]
prob += x11+x21+x31 >= con[4] prob += x12 + x22 + x32 <= con[5]
prob += x12 + x22 + x32 >= con[6] prob += x13 + x23 + x33 <= con[7]
prob += x13 + x23 + x33 >= con[8]
prob += x14 + x24 <= con[9]
prob += x14 + x24 >= con[10] # 求解 status = prob.solve() print(status)
print(LpStatus[status])
print(value(prob.objective)) # 计算结果 # 显示结果
# for i in prob.variables():
# print(i.name + "=" + str(i.varValue))
for i in prob.variables():
print(i.varValue) if __name__ == '__main__':
c = [160, 130, 220, 170, 140, 130, 190, 150, 190, 200, 230]
con = [50, 60, 50, 80, 30, 140, 70, 30,10, 50, 10]
getresult(mubiao, yueshu)
输出结果:
1
Optimal
24400.0
0.0
50.0
0.0
0.0
0.0
50.0
0.0
10.0
40.0
0.0
10.0
python 之pulp 线性规划介绍及举例的更多相关文章
- Python+selenium之简单介绍unittest单元测试框架
Python+selenium之简单介绍unittest单元测试框架 一.unittest简单介绍 unittest支持测试自动化,共享测试用例中的初始化和关闭退出代码,在unittest中最小单元是 ...
- python Scrapy安装和介绍
python Scrapy安装和介绍 Windows7下安装1.执行easy_install Scrapy Centos6.5下安装 1.库文件安装yum install libxslt-devel ...
- 【转】图解CSS的padding,margin,border属性(详细介绍及举例说明)
W3C组织建议把所有网页上的对像都放在一个盒(box)中,设计师可以通过创建定义来控制这个盒的属性,这些对像包括段落.列表.标题.图片以及层.盒模型主要定义四个区域:内容(content).边框距(p ...
- [翻译]Mock 在 Python 中的使用介绍
目录 Mock 在 Python 中的使用介绍 原文链接与说明 恐惧系统调用 一个简单的删除函数 使用 Mock 重构 潜在陷阱 向 'rm' 中加入验证 将文件删除作为服务 方法 1:模拟实例的方法 ...
- Python的基本类型介绍和可变不可变
Python的基本类型介绍 前言 做python有一段时间了,从工作开始就在不断地学习和积累.但是有时候用到一些技术点,甚至是基础知识的时候,总是会遗忘.所以,从今天开始,就在这里记录下来,不仅可以分 ...
- Python 爬虫利器 Selenium 介绍
Python 爬虫利器 Selenium 介绍 转 https://mp.weixin.qq.com/s/YJGjZkUejEos_yJ1ukp5kw 前面几节,我们学习了用 requests 构造页 ...
- Python 基于python操纵redis入门介绍
基于python操纵redis入门介绍 by:授客 QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3.3.2 基于Python操作R ...
- python shutil模块简单介绍
python shutil模块简单介绍 简介 shutil模块提供了大量的文件的高级操作.特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作. shutil 模块方法: copy(src, ...
- python之pandas简单介绍及使用(一)
python之pandas简单介绍及使用(一) 一. Pandas简介1.Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据 ...
随机推荐
- angular4.0快速import依赖路径
快捷键:ALT + ENTER 直接import对应的依赖路径
- shell脚本的if语句,判断某程序是否存在,不存在启动该程序!
想必大家都知道 "如果......那么......" 这种语法的应用吧! 当然呢,linux下对于这种用法也是有所考虑的,很多时候我们都需要写一个shell脚本,难免会避免if语句 ...
- Go执行远程ssh命令
使用包:golang.org/x/crypto/ssh 以下封装一个发送命令的Cli结构体 type Cli struct { IP string //IP地址 Username string //用 ...
- 认证客户端的链接与socketserver实现并发
from socket import * import hmac,os secret_key=b'linhaifeng bang bang bang' def conn_auth(conn): ''' ...
- windows虚拟内存管理
内存管理是操作系统非常重要的部分,处理器每一次的升级都会给内存管理方式带来巨大的变化,向早期的8086cpu的分段式管理,到后来的80x86 系列的32位cpu推出的保护模式和段页式管理.在应用程序中 ...
- git命令记录
1, clone 远程分支 git clone 命令默认的只会建立master分支,如果你想clone指定的某一远程分支(如:dev)的话,可以如下: A. 查看所有分支(包括隐藏的) git br ...
- sprintf的用法
正文:printf 可能是许多程序员在开始学习C 语言时接触到的第二个函数(我猜第一个是main),说起来,自然是老朋友了,可是,你对这个老朋友了解多吗?你对它的那个孪生兄弟sprintf 了解多吗? ...
- 使用jemeter手工编写注册、登陆脚本 运用 fiddler (二)
接着上一篇讲 我们需要添加关联来获取我们想要的动态值 如果做过自动化测试的人都知道 不管是注册或者登陆是时候都会有一个 类似于动态码的一个东西 只有这个东西验证成功 我们才能注册 或者 登陆 那 ...
- Spring读取外部属性-properties
概述 在Spring中处理外部值最简常用的方法就是外部创建name.properties文件,并在其中声明变量值,供Java进行读取.比如数据源信息配置,Java固定属性位置等.读取的方式一般由三种: ...
- Java泛型集合
所谓泛型就是允许在定义类.接口时指定类型形参,这个类型形参将在声明变量.创建对象时确定.增加了泛型支持后的集合,完全可以记住集合 中元素的类型,并可以在编译时检查集合中元素的类型.即解决一些安全问题, ...