python minimize_Python数学规划案例一

Python数学规划案例一

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

我的公众号

cec55fbaca21af9485ee8ea53617de56.png

数学规划模型表述习惯

采用五个部分: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研究生

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/561164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java map转string_【库学科技】32道常见的Java基础面试题

内容来源于图灵 侵删。什么是 Java 虚拟机(JVM)&#xff1f;为什么 Java 被称作是“平台无关的编程语言”&#xff1f;Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程。Java 源文件被编译成能被 Java 虚拟机执行的字节码文件。Java 被设计成允许应用程序可以运行在任意的平…

cout输出字符串_leetcode C++题解系列-042 字符串相乘

题目给定两个以字符串形式表示的非负整数 num1 和 num2&#xff0c;返回 num1 和 num2 的乘积&#xff0c;它们的乘积也表示为字符串形式。示例 1:输入: num1 "2", num2 "3"输出: "6"示例 2:输入: num1 "123", num2 "456&quo…

python序列类型举例说明_Python(第八课,序列类型)

引言&#xff1a; 我们之前学过整数&#xff0c;浮点数&#xff0c;字符串&#xff0c;今天带来的更具有包容性。 今天带来的是高级数据类型&#xff0c;包括列表&#xff0c;元组&#xff0c;集合和字典。根据他们特性不同&#xff0c;可以分为序列类型&#xff0c;集合类型&a…

上传附件_留学落户|上传附件预审时一定一定要注意的问题!

点击上方蓝色字体&#xff0c;关注启铭君。www.minqifudao.com启铭君相信大家都知道&#xff0c;从2019年留学落户“一网通办”新系统上线&#xff0c;可以在网上进行材料申报&#xff0c;“让数据多走路&#xff0c;让群众少跑腿”。在新系统中填报资料&#xff0c;怎样才能做…

python斐波那契数列30_python的30个骚操作

1、冒泡排序2、计算x的n次方的方法3、计算a*a b*b c*c ……4、计算阶乘 n!5、列出当前目录下的所有文件和目录名6、把一个list中所有的字符串变成小写&#xff1a;7、输出某个路径下的所有文件和文件夹的路径8、输出某个路径及其子目录下的所有文件路径9、输出某个路径及其子…

python中值滤波介绍_Python 实现中值滤波、均值滤波的方法

红包&#xff1a;Lena椒盐噪声图片&#xff1a;# -*- coding: utf-8 -*- """ Created on Sat Oct 14 22:16:47 2017 author: Don """ from tkinter import * from skimage import io import numpy as np imio.imread(lena_sp.jpg, as_greyTrue) …

竖向图片插入_Word小技巧:让你的图片文字排版更有创意

想在头条中发表文章或者写论文&#xff0c;插入的图片太单调&#xff1f;今天小编就简单跟大家分享几个小技巧&#xff0c;图片搭配文字让你的版面更有可读性。第一种&#xff1a;最简单的横向文字排版具体做法&#xff1a;在word中插入图片后&#xff0c;插入一个文本框后输入…

11有没有压力感应_特殊感应器赋予机械手多维触感

最新研发的机械触感装备&#xff0c;已经不仅具有可伸展的韧性&#xff0c;还具有感知压力、形变和拉力的功能&#xff0c;将为软体机器人、虚拟现实(VR)和现实增强(AR)等设备带来革命性的巨变。美国康乃尔大学(Cornell University)工程学院副教授谢泼德(Rob Shepherd)说&#…

如何用手机打开dcm格式图片_如何防止自己的图片被盗用?这 4 招教你优雅加水印...

出门旅游一趟&#xff0c;好不容易拍到一组相当满意的图片。想要把这些图片上传到社交平台&#xff0c;如何才能让大家一看就知道这是自己拍的作品&#xff0c;同时又防止盗图呢&#xff1f;答案是在图片上加上自己的水印&#xff0c;这次有用功将和大家分享下&#xff0c;如何…

python 堆_面试再问你什么是堆和栈,你就把这篇文章甩给他

栈&#xff1a;管程序如何运行的&#xff0c;程序如何执行&#xff0c;如何处理数据。(局部变量其实也是存在栈中的&#xff0c;引用数据类型在栈中存的是地址引用)(栈的空间就不需要那么大了)堆&#xff1a;管数据存储的。(引用数据类型的存放,所以堆的空间是比较大的)生活理解…

3d 仪表盘_新一代标致2008官图发布 配备3D全息仪表盘

【太平洋汽车网 新车频道】标致发布了新一代2008的官图&#xff0c;新车基于PSA集团的CMP平台打造&#xff0c;采用了标致最新一代的家族式设计语言&#xff0c;造型风格极具辨识度。据悉&#xff0c;新一代2008将提供汽油、柴油和纯电动三种动力版本供消费者选择&#xff0c;其…

python人脸识别程序如何嵌入到app_只用Python就能写安卓,简单几步实现人脸识别的App...

最近闲来无事&#xff0c;研究研究在安卓上跑Python。 想起以前玩过的kivy技术&#xff0c;kivy[1]是一个跨平台的UI框架。当然对我们最有用的是&#xff0c;kivy可以把python代码打包成安卓App。但是由于安卓打包的工具链很长&#xff0c;包括android sdk打包java代码、ndk编译…

object htmldivelement什么意思_深入探究 Function amp; Object 鸡蛋问题

&#xff08;给前端树加星标&#xff0c;提升前端技能&#xff09;转自&#xff1a;高级前端进阶引言上篇文章用图解的方式向大家介绍了原型链及其继承方案&#xff0c;在介绍原型链继承的过程中讲解原型链运作机制以及属性遮蔽等知识&#xff0c;今天这篇文章就来深入探究下 F…

如何拉取k8s镜像_K8s 从懵圈到熟练 – 镜像拉取这件小事

导读&#xff1a;相比 K8s 集群的其他功能&#xff0c;私有镜像的自动拉取&#xff0c;看起来可能是比较简单的。而镜像拉取失败&#xff0c;大多数情况下都和权限有关。所以&#xff0c;在处理相关问题的时候&#xff0c;我们往往会轻松的说&#xff1a;这问题很简单&#xff…

hadoop没有datanode_Hadoop运行在Kubernetes平台实践

Hadoop与Kubernetes就好像江湖里的两大绝世高手&#xff0c;一个是成名已久的长者&#xff0c;至今仍然名声远扬&#xff0c;一个则是初出茅庐的青涩少年&#xff0c;骨骼惊奇&#xff0c;不走寻常路&#xff0c;一出手便惊诧了整个武林。Hadoop与Kubernetes之间有很深的渊源&a…

git 修改commit_Git从8到13 深入了解Git特性

上一章简单的介绍了一些常用的Git命令&#xff0c;这一章主要是深入了解一下Git的稍微高级的一些知识和指令。8.首先我们先来通过查看Git目录里面的文件来深入了解一下Git版本控制的构造。 查看HEAD可以知道当前所在的分支。在config文件里面存储着Git里面的一些配置信息&#…

eclipse maven打包jar 部分jsp无法访问_Maven系列教材 (九)- 在Eclipse中创建maven风格的java web项目...

Maven系列教材 &#xff08;九&#xff09;- 在Eclipse中创建maven风格的java web项目步骤1:删除j2ee目录步骤2:新建Maven 项目步骤3:这个界面点下一步步骤4: 这个界面使用webapp&#xff0c;点下一步 步骤5:这一步填写如图所示的信息步骤6:此时得到的maven web 项目的问题步骤…

final关键字_深入分析Java中的final关键字

Java中被final修饰的变量与普通变量有何区别&#xff1f;被final修饰的变量不可更改、被final修饰的方法不可重写是怎样做到的&#xff1f;带着疑问我们一点点拨开云雾。一、final的内存定义及规则对于final关键字&#xff0c;编译器、处理器从读写两个角度限制了其使用规则&am…

嵌入式和fpga哪个好前景_Java 和 go 哪个就业前景好一点?面向金钱编程,这个回答太现实...

有个朋友问我&#xff1a;ava 和 go 哪个就业前景好一点&#xff1f;现在纠结中&#xff0c;差不多一年半就要毕业了。我也问了几个朋友程序员朋友&#xff1a;朋友A: 可以参考 Boss 直聘&#xff0c;面向金钱编程&#xff0c;我身边的 Java 都是 15k 左右&#xff0c;反正干就…

php解决mysql主从同步_Mysql读写分离,主从同步实现

随着用户量的增多&#xff0c;数据库操作往往会成为一个系统的瓶颈所在&#xff0c;因此我们可以通过实现数据库的读写分离来提高系统的性能。通过设置主从数据库实现读写分离&#xff0c;主库负责“写”操作&#xff0c;从库负责“读”操作&#xff0c;根据压力情况&#xff0…