Python数学规划案例一

问题、模型、数据、算法、结果,统一地表述,是习惯也是效率。

我的公众号

数学规划模型表述习惯

采用五个部分:Set, Data, Variable, Objective, Constraints;每个Notation,采用一个主字符,上标表示含义,下标来自Set;已知的大写,未知的小写,下标用小写;妥善选择Notation中的每一个字符;对Notation、Objective、Constratins进行分组。模型即代码、即注释、即文章。

数学规划模型编码习惯

Ptyhon程序设计代码与模型表述严格一致 Set, Data, Variable, Objective, Constraints尽量相应“翻译”;将模型、数据预处理、模型结果后处理,分离开来,保持模型的干净、纯粹。代码即模型、即文档、即文章。

一个例子

预算约束下营养配餐。取自:

...\IBM\ILOG\CPLEX_Studio129\python\examples\mp\modeling\diet.py

模型

采用五个部分:Set, Data, Variable, Objective, Constraints建模。

代码

根据diet.py改写的代码如下。

# -*- coding: utf-8 -*-

from collections import namedtuple

from docplex.mp.model import Model

from docplex.util.environment import get_environment

# ----------------------------------------------------------------------------

# Initialize the problem data

# ----------------------------------------------------------------------------

FOODS = [

("Roasted Chicken", 0.84, 0, 10),

("Spaghetti W/ Sauce", 0.78, 0, 10),

("Tomato,Red,Ripe,Raw", 0.27, 0, 10),

("Apple,Raw,W/Skin", .24, 0, 10),

("Grapes", 0.32, 0, 10),

("Chocolate Chip Cookies", 0.03, 0, 10),

("Lowfat Milk", 0.23, 0, 10),

("Raisin Brn", 0.34, 0, 10),

("Hotdog", 0.31, 0, 10)

]

NUTRIENTS = [

("Calories", 2000, 2500),

("Calcium", 800, 1600),

("Iron", 10, 30),

("Vit_A", 5000, 50000),

("Dietary_Fiber", 25, 100),

("Carbohydrates", 0, 300),

("Protein", 50, 100)

]

FOOD_NUTRIENTS = [

("Roasted Chicken", 277.4, 21.9, 1.8, 77.4, 0, 0, 42.2),

("Spaghetti W/ Sauce", 358.2, 80.2, 2.3, 3055.2, 11.6, 58.3, 8.2),

("Tomato,Red,Ripe,Raw", 25.8, 6.2, 0.6, 766.3, 1.4, 5.7, 1),

("Apple,Raw,W/Skin", 81.4, 9.7, 0.2, 73.1, 3.7, 21, 0.3),

("Grapes", 15.1, 3.4, 0.1, 24, 0.2, 4.1, 0.2),

("Chocolate Chip Cookies", 78.1, 6.2, 0.4, 101.8, 0, 9.3, 0.9),

("Lowfat Milk", 121.2, 296.7, 0.1, 500.2, 0, 11.7, 8.1),

("Raisin Brn", 115.1, 12.9, 16.8, 1250.2, 4, 27.9, 4),

("Hotdog", 242.1, 23.5, 2.3, 0, 0, 18, 10.4)

]

Food = namedtuple("Food", ["name", "unit_cost", "qmin", "qmax"])

Nutrient = namedtuple("Nutrient", ["name", "qmin", "qmax"])

# ----------------------------------------------------------------------------

# Build the model

# ----------------------------------------------------------------------------

def build_diet_model(**kwargs):

# Create tuples with named fields for foods and nutrients

F = [f[0] for f in FOODS]

C = {f[0]:f[1] for f in FOODS}

Fmin = {f[0]:f[2] for f in FOODS}

Fmax = {f[0]:f[3] for f in FOODS}

N = [n[0] for n in NUTRIENTS]

Nmin = {n[0]:n[1] for n in NUTRIENTS}

Nmax = {n[0]:n[2] for n in NUTRIENTS}

D = {(F[f],N[n]): FOOD_NUTRIENTS[f][n+1] for f in range(len(F)) for n in range(len(N))}

# Model

mdl = Model(name='diet', **kwargs)

# Decision variables, limited to be >= Food.qmin and <= Food.qmax

x = mdl.continuous_var_dict(F, lb=Fmin, ub=Fmax, name=F) # 2,4

# Limit range of nutrients, and mark them as KPIs

for n in N:

y = mdl.sum(x[f] * D[f, n] for f in F)

mdl.add_range(Nmin[n], y, Nmax[n]) # 3

mdl.add_kpi(y, publish_name="Total %s" % n)

for f in F:

mdl.add_kpi(x[f], publish_name="Food %s" % f)

# Minimize cost

mdl.minimize(mdl.sum(x[f] * C[f] for f in F)) # 1

return mdl

# ----------------------------------------------------------------------------

# Solve the model and display the result

# ----------------------------------------------------------------------------

if __name__ == '__main__':

mdl = build_diet_model()

mdl.print_information()

mdl.export_as_lp()

if mdl.solve():

mdl.float_precision = 3

print("* model solved as function:")

mdl.print_solution()

mdl.report_kpis()

# Save the CPLEX solution as "solution.json" program output

with get_environment().get_output_stream("diet2.json") as fp:

mdl.solution.export(fp, "json")

else:

print("* model has no solution")

扩展阅读

Python数学规划之Cplex之旅

Python利器

Python哲学

Python研究生

python minimize_Python数学规划案例一相关推荐

  1. python项目开发案例-Python项目开发案例集锦 PDF 全彩超清版

    给大家带来的一篇关于Python案例相关的电子书资源,介绍了关于Python.项目开发.Python案例方面的内容,本书是由吉林大学出版社出版,格式为PDF,资源大小99.1 MB,明日科技编写,目前 ...

  2. python开发项目案例集锦 pdf_Python项目开发案例集锦 实战项目代码+配套文件

    Python项目开发案例集锦涵盖8个开发方向.23个项目,循序渐进地让读者在实践中学习,在实践中提升实际开发能力. 全书共8篇:控制台程序.小游戏.实用小工具.网络爬虫.数据分析.人工智能.Web开发 ...

  3. python 查询sqlserver 视图_SQL Server 2017 数据库教与学(教学大纲,含Python+SQL Server案例)...

    原标题:SQL Server 2017 数据库教与学(教学大纲,含Python+SQL Server案例) 本书提供Python+SQL Server案例 SQL Server教学大纲 一.课程的性质 ...

  4. python 速度 memmap_从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例

    <从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例>要点: 本文介绍了从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例,希望对您有用.如果有疑问,可 ...

  5. 转 从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例

    注: 转自 微信公众号"高可用架构":从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例 导读:Python 被很多互联网系统广泛使用,但在另外一方面,它也存在一 ...

  6. Python基础语法案例(Fibonacci):选择结构、循环结构、异常处理结构、代码优化

    推荐图书: <Python程序设计基础(第2版)>,ISBN:9787302490562,董付国,清华大学出版社,第16次印刷,清华大学出版社2019年度畅销图书 图书购买链接(京东): ...

  7. Python视频处理案例六则:旋转视频、调整音量/播放速度、淡入淡出、插入转场素材...

    封面图片:<Python程序设计基础与应用>(ISBN:9787111606178),董付国,机械工业出版社 图书详情: ============== 环境配置请参考:Python视频处理 ...

  8. Python花式编程案例集锦(9):sorted()函数中消失的cmp参数

    明天开启全国巡讲Python模式,连续8场20天讲课,外加路上来回大约16天,这个假期有的忙了.所以接下来的一段时间里不一定能像以前更新的那么频繁,我尽量. 在很久很久很久以前,公众号曾经推送过这样一 ...

  9. Python花式编程案例集锦(8):判断吉祥数字

    问题描述:在有些文化中,认为含有8的数字是吉祥数字,能给自己带来好运.要求编写一个函数测试给定的数字是否为吉祥数字. 参考代码: 代码运行没有输出,说明两种方法是等价的. 思考题:在checkLuck ...

最新文章

  1. 2008中国国际计算机信息及网络安全展览会
  2. Sqlserver 如何获取每组中的第一条记录
  3. Java语法糖之foreach
  4. MINA核心结构和处理消息的逻辑流程
  5. 重磅!阿里宣布成立芯片公司,“平头哥”能解决中国的“无芯之痛”吗?
  6. 输入输出系统的发展概况
  7. Codeforces 464E. The Classic Problem
  8. 【2019杭电多校第五场1002=HDU6625】three arrays(01字典树+思维+贪心)
  9. CCS 5.5的安装教程
  10. CTPN - 自然场景文本检测
  11. 社交网络分析中(SNA)的中心性(centrality) 度中心性(degree),接近中心性(closeness),中介中心性(betweenness)
  12. 用rtl8139网卡制作的bios编程器(不用并口)
  13. linux echo 时间
  14. 中科大计算机博士毕业条件,惊呆!中科大博士毕业6年后再考医学专科,他这样回应……...
  15. AD使用技巧——如何改变布线走线的角度
  16. 数据可视化:科研论文配色
  17. 主线程 子线程死掉_当线程死时,子进程也会死
  18. Oracle 11g安装报错You do not have sufficient permissions to access the inventory
  19. 嵌入式软件工程师是前端还是后端_嵌入式软件工程师与软件工程师的区别
  20. ORACLE WHER条件的执行顺序是不是自右向左

热门文章

  1. 2021最新Python量化A股投资必赚策略
  2. 手把手带你玩转Tensorflow 物体检测 API (2)——数据准备
  3. 利用JQuery插件CleverTabs实现多页签打开效果
  4. 操作系统的SPOOLING技术
  5. activiti 多部门审批_Activiti 基本介绍
  6. exfat为什么不适合机械硬盘_为什么有人说小排量车不适合跑高速,多少排量的车适合?...
  7. python的知识点运用_程序猿在Python编程中不得不使用的十二种基础知识
  8. 浮点加法器计算机组成原理,计算机组成原理 第二章运算方法与运算器
  9. msp430单片机 温度计编程_MSP430系列与89C5l系列的比较
  10. 微信公众号怎么给微店设置运费