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,一经查实,立即删除!

相关文章

python中方法调用方法_Python中实现结构相似的函数调用方法

python的dict用起来很方便&#xff0c;可以自定义key值&#xff0c;并通过下标访问&#xff0c;示例如下&#xff1a; >>> d {key1:value1, ... key2:value2, ... key3:value3} >>> print d[key2] value2 >>> lambda表达式也是很实用的东东&#x…

python安卓开发实例_python服务器与android客户端socket通信实例

本文实例讲述了python服务器与android客户端socket通信的方法。分享给大家供大家参考。具体实现方法如下&#xff1a; 首先&#xff0c;服务器端使用python完成&#xff0c;下面为python代码&#xff1a; #server.py import socket def getipaddrs(hostname):#只是为了显示IP&a…

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获取对象的大小_Python实现计算对象的内存大小示例

本文实例讲述了Python实现计算对象的内存大小。分享给大家供大家参考&#xff0c;具体如下&#xff1a; 一般的sys.getsizeof()显示不了复杂的字典。 查看类中的内容&#xff1a; def dump(obj): for attr in dir(obj):#dir显示类的所有方法 print(" obj.%s %r" % (…

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

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

sqlplus 镜像_【Docker】拉取Oracle 11g镜像配置

以下是基于阿里云服务器Centos 7操作1.拉取Oracle11g镜像docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g等待下载即可……下载完成后&#xff0c;使用下列命令查看镜像docker images从上图可以清楚看到镜像拉取完毕2.创建容器docker run -d -p 1521:1521 -…

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编译…

requirejs加载顺序_教你5分钟学会用requirejs(必看篇)

requirejs是干啥的啊&#xff1f;曾经&#xff0c;我们将一些js组件放到不同的文件&#xff0c;然后通过script标签引入&#xff0c;如果几个组件有依赖&#xff0c;那么要小心了&#xff0c;你必须将被依赖的放到前面&#xff0c;否则的话会出现啥啥啥is undefined或者啥啥啥i…

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

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

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

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

python中getopt函数_Python中getopt()函数的使用

在运行程序时&#xff0c;可能需要根据不同的条件&#xff0c;输入不同的命令行选项来实现不同的功能。目前有短选项和长选项两种格式。短选项格式为"-"加上单个字母选项&#xff1b;长选项为"--"加上一个单词。长格式是在Linux下引入的。许多Linux程序都支…