用Python实现运筹学——Day 17: 0-1 整数规划

news2025/1/14 18:44:07

一、学习内容

1. 0-1 整数规划的定义

0-1 整数规划是一类特殊的整数规划问题,决策变量只能取 0 或 1。它常用于解决选择问题,如是否选择某个项目、是否执行某个任务等。决策变量 x_i​ 通常表示“选择”(x_i = 1)或“不选择”(x_i = 0)。

2. 应用场景

0-1 整数规划在很多领域中都有应用:

  • 投资组合优化:在有限的预算下,选择合适的投资项目组合以最大化回报。
  • 设施选址问题:选择哪些地点建立设施以最小化成本或最大化收益。
  • 任务分配问题:在任务分配中,是否选择某个员工执行某项任务。

3. 如何构建 0-1 整数规划模型

0-1 整数规划模型的构建过程和普通整数规划类似,区别在于变量的取值范围被限制为 0 或 1。


二、实战案例:0-1 整数规划求解投资组合问题

2.1 问题描述

某投资者有 5 个潜在的投资项目,投资者的目标是在有限的预算下最大化总收益。已知以下信息:

  • 投资项目的初始投资成本和预期收益:
项目成本 (万元)预期收益 (万元)
A5060
B4055
C3050
D2040
E1030
  • 投资者的预算为 100 万元。

目标是确定投资哪些项目,以最大化总收益,并且总成本不能超过 100 万元。


2.2 0-1 整数规划模型
  1. 决策变量

    • x_i​ 表示是否投资项目 i,其中i \in \{A, B, C, D, E\} 。如果投资项目 i,则 x_i = 1,否则 x_i = 0
  2. 目标函数

    • 最大化总收益:
    \text{maximize } Z = 60 x_A + 55 x_B + 50 x_C + 40 x_D + 30 x_E
  3. 约束条件

    • 总投资成本不能超过 100 万元:
    50 x_A + 40 x_B + 30 x_C + 20 x_D + 10 x_E \leq 100
  4. 变量约束

    • 决策变量只能取 0 或 1:
    x_i \in \{0, 1\}, \quad i \in \{A, B, C, D, E\}

三、Python 实现:使用 pulp 求解 0-1 整数规划问题

3.1 代码实现
import pulp

# 创建一个 0-1 整数规划问题
problem = pulp.LpProblem("Investment Portfolio Optimization", pulp.LpMaximize)

# 定义决策变量,每个变量只能取 0 或 1
x_A = pulp.LpVariable('x_A', cat='Binary')
x_B = pulp.LpVariable('x_B', cat='Binary')
x_C = pulp.LpVariable('x_C', cat='Binary')
x_D = pulp.LpVariable('x_D', cat='Binary')
x_E = pulp.LpVariable('x_E', cat='Binary')

# 目标函数:最大化总收益
problem += 60 * x_A + 55 * x_B + 50 * x_C + 40 * x_D + 30 * x_E

# 约束条件:总投资成本不能超过 100 万元
problem += 50 * x_A + 40 * x_B + 30 * x_C + 20 * x_D + 10 * x_E <= 100

# 求解问题
status = problem.solve()

# 输出结果
if status == pulp.LpStatusOptimal:
    print("最优解找到!")
    print(f"投资项目 A:{pulp.value(x_A)}")
    print(f"投资项目 B:{pulp.value(x_B)}")
    print(f"投资项目 C:{pulp.value(x_C)}")
    print(f"投资项目 D:{pulp.value(x_D)}")
    print(f"投资项目 E:{pulp.value(x_E)}")
    print(f"最大化的总收益:{pulp.value(problem.objective):.2f} 万元")
else:
    print("未找到最优解。")

3.2 代码解释

  1. 决策变量

    • 每个变量 x_A, x_B, x_C, x_D, x_E​ 都是二进制变量,表示是否投资对应的项目。
  2. 目标函数

    • 我们的目标是最大化总收益:
    Z = 60 x_A + 55 x_B + 50 x_C + 40 x_D + 30 x_E

    其中,60, 55, 50, 40, 30 分别是每个项目的预期收益。

  3. 约束条件

    • 总投资成本不能超过 100 万元:
    50 x_A + 40 x_B + 30 x_C + 20 x_D + 10 x_E \leq 100
  4. 求解方法

    • 使用 problem.solve() 解决 0-1 整数规划问题,并输出最优解。

四、运行结果分析

运行程序后,将得到最优的投资组合和最大化的总收益。

示例运行结果:

最优解找到!
投资项目 A:1.0
投资项目 B:1.0
投资项目 C:0.0
投资项目 D:1.0
投资项目 E:1.0
最大化的总收益:185.00 万元

分析结果

  • 通过 0-1 整数规划模型,确定了最优的投资组合。
  • 根据最优解,应该投资项目 A、B、D、E,放弃项目 C。
  • 总收益为 185 万元,且总投资成本未超过 100 万元的预算。

五、总结

通过本节的 0-1 整数规划案例,我们学习了如何构建并求解 0-1 整数规划问题。0-1 整数规划模型非常适合用于解决选择问题,如投资组合优化问题。

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

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

相关文章

实用宝典:元器件外贸独立站电子元件数据库设置完全手册

对于投身于元器件外贸领域的企业来说&#xff0c;如何建立一个既能凸显自身特色又具备高度功能性与良好用户体验的独立站&#xff1f;而在这一过程中&#xff0c;#电子元件数据库#作为独立站的核心要素之一&#xff0c;它的构建质量和管理方式又将如何直接影响网站的整体竞争力…

Python| 如何使用 DALL·E 和 OpenAI API 生成图像(2)

引言 想象一下&#xff0c;只要描述你想要的画面&#xff0c;电脑就能帮你画出来。这在几年前还像是科幻小说里的场景&#xff0c;但随着神经网络和潜在扩散模型&#xff08;LDM&#xff09;技术的发展&#xff0c;现在已经成为可能。OpenAI 推出的 DALLE 工具&#xff0c;因其…

STM32L151 多通道ADC DMA循环扫描STM32CubeIDE STM32CubeMX参考设计

简介 项目开发过程中&#xff0c;采用STM32L151 芯片进行涉及&#xff0c;其中需要使用其片上ADC进行多路ADC数据采样。这里就记录一下实际这块的开发过程&#xff0c;其中涉及工程代码再项目中实际投产使用。STM32L151 多通道ADC DMA循环扫描STM32CubeIDE STM32CubeMX参考设计…

【文心智能体 | AI大师工坊】通过知识库优化智能体『万圣节之纸人还魂』:探索恐怖剧本杀的奇幻之旅

文章目录 1.1、智能体运行效果1.2、创作灵感来源1.3、如何制作智能体1.4、可能会遇到的几个问题1.5、快速调优指南 My_优质智能体『万圣节之纸人还魂&#x1f47b;』&#xff1a;https://aq58pt.smartapps.baidu.com/?_swebfr1&_swebScene3611000100000000 在当今人工智能…

Vue开发中由错误These relative modules were not found 引起的问题思考及解决

一、由Vue: These relative modules were not found 引起的问题 1、vue2.6.14 These relative modules were not found 在使用vue2.6.14开发的项目在本地windows 10上都一直成功&#xff0c;想放到jenkins上进行发布。之前其它的 vue 项目也都能发布正常&#xff0c;但此次一…

【stm32】DMA的介绍与使用

DMA的介绍与使用 1、DMA简介2、存储器映像3、DMA框图4、DMA基本结构5、DMA请求6、数据宽度与对齐7、数据转运DMA&#xff08;存储器到存储器的数据转运&#xff09;程序编写&#xff1a; 8、ADC连续扫描模式DMA循环转运DMA配置&#xff1a;程序编写&#xff1a; 1、DMA简介 DM…

Antsword-labs靶机渗透

Less-1 在当前界面开启终端 ![](https://img-blog.csdnimg.cn/img_convert/e5ab1b947b1186a43b58abaf10263cb1.png) 启动环境 plain docker-compose up -d 蚁剑连接 ![](https://img-blog.csdnimg.cn/img_convert/81a5c09987e18355335d07e4da52cb5f.png) 打开终端寻找flag …

ACL:访问控制列表

基本概念 1.访问控制: 在路由器的入或者出的接口上&#xff0c;匹配流量&#xff0c;之后产生动作&#xff0c;只有允许和拒绝。 2.定义感兴趣流量: 帮助其他策略抓流量的 匹配规则:至上而下 逐一匹配 上条匹配按照上条执行 不再查看下条 (思科体系中 末尾隐含拒绝所有 华为…

20个月投标战胜国际对手,中国百余台AGV进驻欧洲……

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 在全球智能制造竞争日益激烈的今天&#xff0c;中国制造再次传来振奋人心的好消息。 经过长达20个月的艰苦角逐&#xff0c;一家中国机器人企业&#xff08;新松机器人&#xff09;成…

microsoft edge浏览器卡死问题

win11经常遇到microsoft edge浏览器卡死的情况&#xff0c;有时候是一会没用浏览器就全部卡死&#xff0c;有时候是锁屏或者电脑休眠浏览器就不能用&#xff0c;找了很多的办法都没好使&#xff0c;用以下方法好使了&#xff1a; edge浏览器中打开 edge://settings/system 把 …

计算机的错误计算(一百二十三)

摘要 探讨算式 的计算精度问题。 例1. 已知 计算 不妨在Python下计算&#xff0c;则有&#xff1a; 若用Rust在线计算&#xff1a; fn main() {let x: f64 0.125e-6;let tan_x x.tan();let sin_x x.sin();let denominator x - (1.0 x * x).sqrt();let result (…

大学模拟电路设计期末速成总结

大学模拟电路设计期末速成总结 模拟电路设计是电子工程领域的基础&#xff0c;它涉及到连续信号的处理和放大。对于电子工程的学生来说&#xff0c;掌握模拟电路设计的基本原理和应用是至关重要的。以下是期末速成总结&#xff0c;帮助你快速回顾和掌握模拟电路设计的关键知识…

香橙派刷机和开发环境准备(ubuntu22.04版)_随记1

前言&#xff1a; 一、香橙派刷ubuntu系统和SSH登录 1、刷机前准备&#xff1a; ①TF卡&#xff08;8G&#xff09;、读卡器、OrangePi5Pro ②Win32DiskImager&#xff08;烧写系统工具&#xff09;、SDFormatter&#xff08;TF格式化工具&#xff09; ③系统镜像&#xff…

学习文档(4)

目录 Vue简介 MVVM思想 Vue指令 内容输出指令 条件渲染指令 列表渲染指令 数据绑定指令 Vue简介 Vue2.x官网&#xff1a;https://v2.cn.vuejs.org Vue3.x官网&#xff1a;https://cn.vuejs.org 官网&#xff08;2.x版本&#xff09;对vue的定义是&#xff1a;vue是一套…

kubelet PLEG实现

概述 kubelet的主要作用是确保pod状态和podspec保持一致&#xff0c;这里的pod状态包括pod中的container状态&#xff0c;个数等。 为了达到这个目的&#xff0c;kubelet需要从多个来源watch pod spec的变化&#xff0c;并周期从container runtime获取最新的container状态。比如…

I2C相关结构体讲解:i2c_adapter、i2c_algorithm、i2c_msg

往期内容 I2C子系统专栏&#xff1a; I2C&#xff08;IIC&#xff09;协议讲解SMBus 协议详解 总线和设备树专栏&#xff1a; 专栏地址导航篇 – 专栏未篇 1.框图 建议右击图片在新标签页打开预览 i2c_transfer函数就是读取i2c设备的信息或者输出信息给i2c设备的函数 比如发送…

信息安全工程师(49)网络物理隔离系统与类型

前言 网络物理隔离系统是指通过物理隔离技术&#xff0c;在不同的网络安全区域之间建立一个能够实现物理隔离、信息交换和可信控制的系统&#xff0c;以满足不同安全域的信息或数据交换需求。 一、网络物理隔离系统概述 网络物理隔离系统的核心在于通过物理方式将不同安全级别的…

SQL Injection | SQL 注入概述

关注这个漏洞的其他相关笔记&#xff1a;SQL 注入漏洞 - 学习手册-CSDN博客 0x01&#xff1a;SQL 注入漏洞介绍 SQL 注入就是指 Web 应用程序对用户输入数据的合法性没有判断&#xff0c;前端传入后端的参数是可控的&#xff0c;并且参数会带入到数据库中执行&#xff0c;导致…

【计算机网络篇】数据链路层 协议、介质访问控制

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【计算机网络】【Mybatis篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 系列文章目录 【计算机网络篇】计算机网络概述 【…

[实时计算flink]CREATE DATABASE AS(CDAS)语句

CDAS支持整库级别的表结构和数据的实时同步&#xff0c;还支持表结构变更的同步。本文为您介绍CREATE DATABASE AS&#xff08;CDAS&#xff09;的使用方法&#xff0c;并提供了多种使用场景下的示例。 背景信息 CDAS是CTAS语法的一个语法糖&#xff0c;用于实现整库同步、多…