当前位置: 首页 > news >正文

自助建站上建的网站免费吗信息技术网站建设专业

自助建站上建的网站免费吗,信息技术网站建设专业,一级造价工程师合格标准,建筑模板尺寸是多少假设我们有三种原油类型: 我们的任务是混合 6000 桶 原油,使其满足: API ≥ 35硫含量 ≤ 1.0%任何原油的用量不超过其可用量 在此场景中,我们的目标是最小化总成本。这可以根据需要改为最大化预期利润(成本与市场价…

假设我们有三种原油类型:

我们的任务是混合 6000 桶 原油,使其满足:

  • API ≥ 35
  • 硫含量 ≤ 1.0%
  • 任何原油的用量不超过其可用量

在此场景中,我们的目标是最小化总成本。这可以根据需要改为最大化预期利润(成本与市场价格之间的差额),或者其他目标函数,例如最大化随时间变化的稳定性。

1 Pyomo

import pyomo.environ as pyomodel = pyo.ConcreteModel()
crudes = ['A', 'B', 'C']
cost = {'A': 70, 'B': 80, 'C': 65}
api = {'A': 34, 'B': 40, 'C': 30}
sulfur = {'A': 1.2, 'B': 0.5, 'C': 2.0}
avail = {'A': 5000, 'B': 3000, 'C': 4000}
model.crudes = pyo.Set(initialize=crudes)
model.vol = pyo.Var(model.crudes, domain=pyo.NonNegativeReals)
model.cost = pyo.Objective(expr=sum(model.vol[c] * cost[c] for c in crudes), sense=pyo.minimize)
model.total_volume = pyo.Constraint(expr=sum(model.vol[c] for c in crudes) == 6000)
model.sulfur = pyo.Constraint(expr=sum(model.vol[c]*sulfur[c] for c in crudes) <= 6000*1.0)
model.api = pyo.Constraint(expr=sum(model.vol[c]*api[c] for c in crudes) >= 6000*35)
model.avail = pyo.ConstraintList()
for c in crudes:model.avail.add(model.vol[c] <= avail[c])
solver = pyo.SolverFactory('glpk')
solver.solve(model)

优点: 建模语言丰富,易于扩展(非线性、MIP)
缺点: 略显冗长,需要外部求解器(GLPK, CBC)

2 PuLP

from pulp import *model = LpProblem("CrudeBlend", LpMinimize)
vol = LpVariable.dicts("vol", ['A', 'B', 'C'], lowBound=0)
model += lpSum([vol[i] * cost[i] for i in crudes])
model += lpSum([vol[i] for i in crudes]) == 6000
model += lpSum([vol[i] * sulfur[i] for i in crudes]) <= 6000 * 1.0
model += lpSum([vol[i] * api[i] for i in crudes]) >= 6000 * 35
for i in crudes:model += vol[i] <= avail[i]
model.solve()

优点: 语法简洁,易于学习,内置 CBC 求解器
缺点: 对于非线性或大型模型功能较弱

3 OR-Tools

from ortools.linear_solver import pywraplpsolver = pywraplp.Solver.CreateSolver('GLOP')
vol = {i: solver.NumVar(0, avail[i], i) for i in crudes}
solver.Add(solver.Sum([vol[i] for i in crudes]) == 6000)
solver.Add(solver.Sum([vol[i]*sulfur[i] for i in crudes]) <= 6000 * 1.0)
solver.Add(solver.Sum([vol[i]*api[i] for i in crudes]) >= 6000 * 35)
solver.Minimize(solver.Sum([vol[i] * cost[i] for i in crudes]))
status = solver.Solve()

优点: 速度极快,适用于 Google 规模系统的生产环境
缺点: 语法灵活性较低,对非线性或符号模型的支持较弱

4 推荐

  • 对于小型、易读的线性规划问题,使用 PuLP
  • 当建模更复杂、多阶段或非线性系统时,使用 Pyomo
  • 当需要速度、性能或路径规划时,使用 OR-Tools

这是一个并排测试。问题很简单,但对于这个简单的问题,运行时差异之大令人惊讶。

import pyomo.environ as pyo
from pulp import *
from ortools.linear_solver import pywraplp
import time
import pandas as pdcrudes = ['A', 'B', 'C']
cost = {'A': 70, 'B': 80, 'C': 65}
api = {'A': 34, 'B': 40, 'C': 30}
sulfur = {'A': 1.2, 'B': 0.5, 'C': 2.0}
avail = {'A': 5000, 'B': 3000, 'C': 4000}
target_vol = 6000
sulfur_max = 1.0
api_min = 35results = {}start = time.time()
model_pyo = pyo.ConcreteModel()
model_pyo.crudes = pyo.Set(initialize=crudes)
model_pyo.vol = pyo.Var(model_pyo.crudes, domain=pyo.NonNegativeReals)
model_pyo.cost = pyo.Objective(expr=sum(model_pyo.vol[c] * cost[c] for c in crudes), sense=pyo.minimize)
model_pyo.total_volume = pyo.Constraint(expr=sum(model_pyo.vol[c] for c in crudes) == target_vol)
model_pyo.sulfur = pyo.Constraint(expr=sum(model_pyo.vol[c]*sulfur[c] for c in crudes) <= target_vol*sulfur_max)
model_pyo.api = pyo.Constraint(expr=sum(model_pyo.vol[c]*api[c] for c in crudes) >= target_vol*api_min)
model_pyo.avail = pyo.ConstraintList()
for c in crudes:model_pyo.avail.add(model_pyo.vol[c] <= avail[c])
solver = pyo.SolverFactory('glpk')
solver.solve(model_pyo)
end = time.time()
results['Pyomo'] = {'runtime_sec': round(end - start, 6),'volumes': {c: round(pyo.value(model_pyo.vol[c]), 2) for c in crudes},'cost': round(sum(pyo.value(model_pyo.vol[c]) * cost[c] for c in crudes), 2)
}start = time.time()
model_pulp = LpProblem("CrudeBlend", LpMinimize)
vol_pulp = LpVariable.dicts("vol", crudes, lowBound=0)
model_pulp += lpSum([vol_pulp[i] * cost[i] for i in crudes])
model_pulp += lpSum([vol_pulp[i] for i in crudes]) == target_vol
model_pulp += lpSum([vol_pulp[i] * sulfur[i] for i in crudes]) <= target_vol * sulfur_max
model_pulp += lpSum([vol_pulp[i] * api[i] for i in crudes]) >= target_vol * api_min
for i in crudes:model_pulp += vol_pulp[i] <= avail[i]
model_pulp.solve()
end = time.time()
results['PuLP'] = {'runtime_sec': round(end - start, 6),'volumes': {c: round(vol_pulp[c].varValue, 2) for c in crudes},'cost': round(value(model_pulp.objective), 2)
}start = time.time()
solver = pywraplp.Solver.CreateSolver('GLOP')
vol_ort = {i: solver.NumVar(0, avail[i], i) for i in crudes}
solver.Add(solver.Sum([vol_ort[i] for i in crudes]) == target_vol)
solver.Add(solver.Sum([vol_ort[i]*sulfur[i] for i in crudes]) <= target_vol * sulfur_max)
solver.Add(solver.Sum([vol_ort[i]*api[i] for i in crudes]) >= target_vol * api_min)
solver.Minimize(solver.Sum([vol_ort[i] * cost[i] for i in crudes]))
status = solver.Solve()
end = time.time()
results['OR-Tools'] = {'runtime_sec': round(end - start, 6),'volumes': {c: round(vol_ort[c].solution_value(), 2) for c in crudes},'cost': round(sum(vol_ort[c].solution_value() * cost[c] for c in crudes), 2)
}df = pd.DataFrame(results).T


文章出自:Comparing Pyomo, PuLP, and OR-Tools for Constrained Optimization problems to find optimal crude oil blends

本篇文章适合对优化算法感兴趣的读者,特别是新手。亮点在于对三种优化工具(Pyomo、PuLP和OR-Tools)的详细比较,涵盖了各自的优缺点及适用场景,帮助用户选择合适的工具进行约束优化问题。

该方法适用于需要优化资源配置的场景,如石油混合、供应链管理等。实际案例展示了如何在约束条件下找到成本最低的原油混合方案,有助于提高决策效率和经济效益。

http://www.dtcms.com/a/494447.html

相关文章:

  • 融合SpringBoot3和Vue3工程
  • 怎么学做网站制作商水县住房城乡建设网站
  • 16-机器学习与大模型开发数学教程-第1章 1-8 泰勒展开与高阶近似
  • 【学习系列】SAP RAP 6:行为定义-Concurrency Control
  • docker 运行容器限制 CPU
  • Python自动化从入门到实战(24)如何高效的备份mysql数据库,数据备份datadir目录直接复制可行吗?一篇给小白的完全指南
  • 个人可以备案网站的内容国外直播平台tiktok
  • C语言也能干大事网站开发pdf企业网站管理系统多站多语言版
  • 清理页面缓存
  • YD925输出5V,高性价比的非隔离电源方案详细介绍
  • 零基础新手小白快速了解掌握服务集群与自动化运维(十二)Python编程之常用模块
  • SQL注入完全攻略:从手工注入到自动化工具的渗透实战
  • 做网站的价格是多少临沂网站域名
  • 深入理解 HTML `<label>` 的 `for` 属性:提升表单可访问性与用户体验
  • 大型语言模型(LLM)文本中提取结构化信息:LangExtract(一)
  • Flask应用改用Waitress运行
  • html css js网页制作成品——HTML+CSS辣条俱乐部网页设计(5页)附源码
  • Spring Boot 3零基础教程,Spring Boot WEB 开发 自动配置原理,笔记24
  • 大数据Spark(六十九):Transformation转换算子intersection和subtract使用案例
  • 郑州做网站狼牙有关网站建设文章
  • 【前端高频面试题】深入浏览器渲染原理:从输入 URL 到页面绘制的完整流程解析
  • 宿州网站建设贰聚思诚信wordpress菜单不兼容
  • C语言——深入解析C语言指针:从基础到实践从入门到精通(四)
  • Cursor 科技感的登录页面提示词
  • Ubuntu 24.04环境下的挂起转休眠
  • 【从0开始学习Java | 第21篇】网络编程综合练习
  • OpenCL初级教程
  • 【Spring AI】基于 sse 实现 MCP Server
  • vue使用限制仅允许上传 Excel 文件
  • dataease开发环境搭建