数模方法论-整数规划

news2024/9/23 15:19:42

一、基本概念

        整数规划是一种特殊的线性规划,其中某些或所有决策变量必须是整数。线性规划的概念可以阅读下面文章:

数模方法论-线性规划-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/qq_41489047/article/details/142134282          这种方法用于解决那些要求解变量为整数的优化问题,例如资源分配、调度问题或网络设计。整数规划可以分为两类:

  • 整数线性规划(ILP):所有决策变量都是整数。
  • 混合整数线性规划(MILP):只有部分决策变量是整数,其余的可以是连续的。

        整数规划是运筹学和优化中的一个重要领域,它涉及在优化问题中要求某些或所有变量为整数。整数规划问题通常比普通的线性规划问题更复杂,因为整数约束使得问题变成了组合优化问题。整数规划在实际中应用广泛,包括:

  • 生产调度:安排生产任务以优化资源使用。
  • 运输和物流:设计高效的运输路线。
  • 资源分配:如项目选择或资金分配问题。
  • 网络设计:优化通信或电力网络布局。

二. 整数规划类型和实际问题

1、整数规划类型

  • 纯整数规划(Pure Integer Programming, IP):所有决策变量都为整数。

  • 混合整数规划(Mixed-Integer Programming, MIP):只有一部分变量为整数,其余为连续。

  • 0-1 整数规划(Binary Integer Programming):变量只能取0或1的值。

2、实际问题

  • 约束条件互斥类问题

  • 固定费用问题

  • 指派类问题

三. 求解方法

常见的求解方法包括:

  • 分支定界法(Branch and Bound):通过递归地分解问题并使用界限来剪枝。
  • 割平面法(Cutting Plane Method):通过添加约束来改善解的可行性。
  • 启发式算法:如遗传算法、模拟退火等。

四. 计算机求解实例

例题一

 Python代码: 
import numpy as np
from pulp import LpProblem, LpVariable, lpSum, LpMinimize, value

# 定义目标函数系数
c = np.array([
    [3, 8, 2, 10, 3],
    [8, 7, 2, 9, 7],
    [6, 4, 2, 7, 5],
    [8, 4, 2, 3, 5],
    [9, 10, 6, 9, 10]
])
c = c.flatten()

# 创建整数规划问题
prob = LpProblem("Integer_Programming_Problem", LpMinimize)

# 定义决策变量
x = LpVariable.dicts("x", (range(25)), cat='Binary')

# 定义目标函数
prob += lpSum(c[i] * x[i] for i in range(25))

# 定义约束条件
# 约束:每行和每列的和必须为1
for i in range(5):
    prob += lpSum(x[i*5+j] for j in range(5)) == 1  # 行约束
    prob += lpSum(x[j*5+i] for j in range(5)) == 1  # 列约束

# 求解问题
prob.solve()

# 提取并显示结果
solution = np.array([value(x[i]) for i in range(25)])
solution = solution.reshape((5, 5))

print("Optimal solution:")
print(solution)
  Matlab代码: 
clc, clear
c=[3 8 2 10 3;8 7 2 9 7;6 4 2 7 5
   8 4 2 3 5;9 10 6 9 10];
c=c(:); a=zeros(10,25); intcon=1:25;
for i=1:5
   a(i,(i-1)*5+1:5*i)=1;
   a(5+i,i:5:25)=1;
end
b=ones(10,1); lb=zeros(25,1); ub=ones(25,1);
x=intlinprog(c,intcon,[],[],a,b,lb,ub);
x=reshape(x,[5,5])

例题二 

Python代码: 
import numpy as np
from scipy.optimize import linprog

# 定义目标函数
f = [-3, -2, -1]

# 定义约束条件
A = [np.ones(3)]  # 等价于 a
b = [7]
A_eq = [[4, 2, 1]]
b_eq = [12]

# 定义变量的上下界
lb = [0, 0, 0]
ub = [np.inf, np.inf, 1]  # 这里 x3 的上下界是 0 到 1

# 将不等式约束合并为一个矩阵
bounds = [(lb[i], ub[i]) for i in range(len(lb))]

# 解决整数规划问题
res = linprog(c=f, A_ub=A, b_ub=b, A_eq=A_eq, b_eq=b_eq, bounds=bounds, method='highs')

# 打印结果
print("Optimal value:", res.fun)
print("Optimal solution:", res.x)
MATLAB代码
clc, clear
f=[-3;-2;-1]; intcon=3; %整数变量的地址
a=ones(1,3); b=7;
aeq=[4 2 1]; beq=12;
lb=zeros(3,1); ub=[inf;inf;1]; %x(3)为0-1变量
x=intlinprog(f,intcon,a,b,aeq,beq,lb,ub)

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

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

相关文章

[数据集][目标检测]高铁受电弓检测数据集VOC+YOLO格式1245张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1245 标注数量(xml文件个数):1245 标注数量(txt文件个数):1245 标注…

YoloV10改进策略:上采样改进|动态上采样|轻量高效,即插即用(适用于分类、分割、检测等多种场景)

摘要 本文使用动态上采样改进YoloV10,动态上采样是今天最新的上采样改进方法,具有轻量高效的特点,经过验证,在多个场景上均有大幅度的涨点,而且改进方法简单,即插即用! 论文:《DySa…

【第30章】Spring Cloud之Sentinel动态规则扩展

文章目录 前言一、规则管理及推送二、DataSource 扩展1. 引入依赖2. 规则文件3. 定义数据源信息 三、服务定义和测试1. 服务定义2. 并发测试3. 控制台查看规则 总结 前言 之前我们定义的流控和熔断规则应用每次重启之后就丢失了,是因为在控制定义规则这些规则仅在内…

Dotnet Publish 报错 - the process cannot access the file

Dotnet Publish 报错 - the process cannot access the file 问题描述: 我在使用自动化部署工具 Jenkins 时,遇到需要使用 dotnet publish 命令来发布.net core 项目时,报错了: The process cannot access the file because it …

若依RuoYi脚手架二次开发教程(二次开发必学技能)

文章目录 一、若依框架修改器二、新建业务模块1、在新模块中导入核心模块依赖2、父工程版本锁定3、添加新模块依赖 三、菜品管理(主子表)1、准备SQL并导入数据库2、配置代码生成信息3、下载代码并导入项目4、页面功能测试5、功能完善与升级改造6、页面调…

I.MX6U裸机-汇编LED灯实验

汇编基础语法参考:初识汇编语言-CSDN博客 本文主要参考正点原子《I.MX6U 嵌入式 Linux 驱动开发指南 》第八章 STM32 GPIO 回顾 我们一般拿到一款全新的芯片,第一个要做的事情的就是驱动其 GPIO,控制其 GPIO 输出高低电平,我们学习…

Python复制数组并增加一个维度

二维数组扩增到三维数组 在处理nc文件过程中,读取的数据如果是多个时间点的数据,比如绿海模式的数据,它的格点的维度除了经纬度还有时间和高度。在进行格点数据插值到站点数据时,为了保持维度一致,也构造一个相同维度的…

【CSS in Depth 2 精译_029】5.2 Grid 网格布局中的网格结构剖析(上)

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对…

opencv之Canny边缘检测

文章目录 前言1.应用高斯滤波去除图像噪声2.计算梯度3.非极大值抑制4.应用双阈值确定边缘5.Canny函数及使用 前言 Canny边缘检测是一种流行的边缘检测算法,用于检测图像中的边缘。它通过一系列步骤将图像中的像素边缘突出显示出来,主要分为以下几个步骤…

ChatGLM3中的一些语法

ChatGLM3中的一些语法 flyfish 一、functools.cache functools.cache 是 Python 3.9 引入的装饰器,用于实现函数的结果缓存。它的全称是 functools.cache,能够自动缓存函数调用的结果。 import functoolsfunctools.cache def expensive_computation(…

Python 封装、继承和多态

在学习 Python 这门编程语言时,你会接触到一些重要的面向对象编程(OOP)概念,比如封装、继承和多态。这些概念不仅是 Python 的核心特性,也是理解和使用高级编程技巧的基础。本文将通俗易懂地解释这些概念,特…

MVC设计模式与delegate,tablview,Appdelegate,SceneDelegate

一、MVC MVC就是Model(模型)、View(视图)、Controller(控制器) 例如上面的 excel表, 数据、数据结构就是模型Model 根据数据形成的直观的、用户能直接看见的柱形图是视图View 数据构成的表格…

Linux网络——socket编程与UDP实现服务器与客户机通信

文章目录 端口号TCP/UDP网络字节序socket的常见APIUDP实现服务器与客户机通信服务器客户机运行效果如下 端口号 我们说即便是计算机网络,他们之间的通信也仍然是进程间通信 那么要如何在这么多计算机中,找到你想要的那个进程呢 在网络中标识的唯一的计…

反激电路的参数设计,基于TI-UC3843芯片,Simplis仿真验证

采用TI官方提供的UC3843芯片手册给的DEMO图,通过MATHCAD计算参数得出环路补偿的各项参数,最后使用simplis进行仿真验证,一起进行学习吧。 UCx84x 电流模式 PWM 控制器 datasheet (Rev. G) (semiee.com) UCx84x 系列控制集成电路提供了实现离…

【springboot过ingress后无法获取X-Forwarded-For头信息】

springboot过ingress后无法获取X-Forwarded-For头信息 一、现象结论修改步骤ingressspringboot 排查流程本文参考 一、现象 项目使用spring boot 2.7.18,有个新需求是校验X-Forwarded-For头的所有来源ip合法性,线上环境出现取不到X-Forwarded-For头的问…

【思博伦】史上最详细思博伦测试仪使用精讲!图解超赞超详细!!!

承接上文 目录 2.2.9.7 配置TCPFLAG 2.2.9.8 配置分片 2.2.9.9 添加VLAN标签 2.2.9.10 添加MPLS标签 2.2.9.11 添加Vntag标签 2.2.9.12 重新快速新建新的帧内容 ​​​​​​​2.2.10 导入Pcap包 2.2.11 发包配置 2.2.11.1 发包模式配置 ​​​​​​​2.2.11.2 配置…

【OJ】关于顺序表的经典题目(移除数组中指定元素的值、数组去重、合并两个有序的数组)

文章目录 前言题目1:移除数组中指定的元素题目描述解题思路方法1 :暴力法方法2:双指针法 题目2:数组去重题目描述解题思路双指针法 题目3:合并两个有序的数组题目描述解题思路方法1:暴力破解法方法2&#x…

SAP F110 批量付款付款参考(KIDNO)和分配字段(ZUONR)带入会计凭证

SAP F110 批量付款付款参考(KIDNO)和分配字段(ZUNOR)带入会计凭证 财务有个要求需要将付款建议的付款参考和分配字段写入最后的ZP凭证 最后的效果大概就是这样的 折腾了很久, 1、先是想到的GGB1的替代,但是试验了很久都没有搞定,貌似很多人遇到了这个情况。 2、然后…

初识爬虫4

1.理解代理ip,正向代理和反向代理 2.代理ip分类,根据匿名度分类:透明,匿名,高匿 3.防止频繁向同一个域名发送请求被封ip,需使用代理ip # -*- coding: utf-8 -*- import requestsurl https://www.baidu.comproxies {…

Facebook如何通过AI改变你的社交体验?

在当今数字化的社交媒体环境中,Facebook作为全球最大的社交平台之一,正在通过引入和优化人工智能(AI)技术,改变用户的社交体验。人工智能不仅帮助Facebook增强了内容推荐和信息过滤的精准度,还让平台具备了…