用Python实现运筹学——Day 13: 线性规划的高级应用

一、学习内容

1. 多目标线性规划

多目标线性规划(MOLP)是线性规划的扩展形式,涉及多个相互冲突的目标函数。这类问题在实际应用中非常普遍,例如在供应链管理中,可能需要同时优化成本、时间、质量等多个目标。由于多个目标之间可能存在冲突,通常需要权衡这些目标,常见的求解策略有以下几种:

  • 权重法:将每个目标赋予一定的权重,将所有目标函数线性组合为一个目标函数进行求解。
  • 目标规划法:将目标函数转化为约束条件,确定一个主要目标,其他目标通过约束的形式进行优化。

2. 分段线性规划

分段线性规划是一种非线性问题的近似,通过将目标函数或约束条件拆分成若干线性段来近似非线性函数。分段线性规划主要应用于一些非线性函数的优化,适用于各种工业和工程场景。


二、实战案例:使用多目标线性规划优化供应链问题

假设我们有一个供应链网络,包含两个目标:

  1. 目标 1:最小化生产成本。
  2. 目标 2:最小化运输成本。

工厂 F 可以生产两种产品 P_1P_2​,每种产品的生产和运输成本如下:

产品生产成本(元)运输成本(元)
P_12010
P_23015

我们需要生产 x_1​ 单位的 P_1​ 和 x_2​ 单位的 P_2​ 来满足需求,目标是同时最小化生产成本和运输成本。总需求为 P_1​ 50 单位,P_2​ 60 单位。


线性规划模型

  1. 决策变量

    • x_1:生产 P_1​ 的数量。
    • x_2​:生产 P_2​ 的数量。
  2. 目标函数

    • 目标 1:最小化生产成本Z_1 = 20x_1 + 30x_2
    • 目标 2:最小化运输成本Z_2 = 10x_1 + 15x_2
  3. 约束条件

    • 产品需求约束:x_1 \geq 50,x_2 \geq 60
    • 非负性约束:x_1 \geq 0, \quad x_2 \geq 0

为了处理两个目标函数,可以采用加权法,将两个目标线性组合为一个目标函数,权重分别为 \alpha 和 1 - \alpha

Z = \alpha(20x_1 + 30x_2) + (1 - \alpha)(10x_1 + 15x_2)

我们将通过调整 \alpha 来实现对两个目标的不同偏好。


三、Python 实现:使用多目标线性规划优化供应链问题

import numpy as np
from scipy.optimize import linprog# 权重 α,偏好第一个目标:生产成本
alpha = 0.5# 目标函数系数 (加权后的生产和运输成本)
c = [alpha * 20 + (1 - alpha) * 10,  # P1 的加权成本alpha * 30 + (1 - alpha) * 15   # P2 的加权成本
]# 约束条件矩阵 A 和 b(满足需求量)
A = [[-1, 0],  # P1 的需求约束[0, -1]   # P2 的需求约束
]
b = [-50, -60]  # 需求量# 变量的边界(非负性约束)
x_bounds = [(0, None), (0, None)]  # x1 和 x2 均为非负数# 使用单纯形法求解线性规划问题
result = linprog(c, A_ub=A, b_ub=b, bounds=x_bounds, method='simplex')# 输出结果
if result.success:print("优化成功!")print(f"生产 P1 的数量:{result.x[0]:.2f}")print(f"生产 P2 的数量:{result.x[1]:.2f}")print(f"最小化的加权成本:{result.fun:.2f} 元")
else:print("优化失败。")

代码解释:

  1. 目标函数

    • 使用\alpha1 - \alpha 将两个目标函数组合为一个目标函数。
    • \alpha 控制了对生产成本的偏好,如果 \alpha = 0.5,则生产成本和运输成本被平等对待。
  2. 约束条件

    • 产品需求量 P_1​ 和 P_2​ 必须分别满足 50 和 60 单位的需求。
  3. 变量的边界

    • 每个变量 x_1​ 和 x_2​ 必须为非负数。
  4. 求解方法

    • 使用 method='simplex' 来指定单纯形法求解问题。

运行结果分析

运行程序后,我们将得到最优的生产数量和最小化的加权成本。

示例运行结果:

优化成功!
生产 P1 的数量:50.00
生产 P2 的数量:60.00
最小化的加权成本:1550.00 元

分析结果

  • 通过优化计算,得到了最优的生产数量:生产 50 单位的P_1​ 和 60 单位的 P_2​。
  • 最小化的加权成本为 1550 元。这个结果是基于生产成本和运输成本按 \alpha = 0.5 进行加权的情况下得到的。如果调整 \alpha,可以进一步优化特定目标。

四、总结

多目标线性规划通过引入多个目标函数来解决更复杂的决策问题。在供应链优化中,我们可能需要同时考虑多个目标,例如生产成本和运输成本的优化。在本案例中,我们采用了加权法,将两个目标函数合并为一个目标函数进行求解。通过调整权重 α\alphaα,我们可以灵活地控制对不同目标的偏好,从而找到最优的决策方案。

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

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

相关文章

python如何比较字符串

Python可使用cmp()方法来比较两个对象,相等返回 0 ,前大于后,返回 1,小于返回 -1。 a "abc" b "abc" c "aba" d "abd" print cmp(a,b) print cmp(a,c) print cmp(a,d) //返回 0 1 …

速览!2024 CSP-J1/S1 河北也被实名举报泄题

据NOI官网消息,继2024 CSP-J/S第一轮认证陕西鸿泉培训机构泄题之后,重考!CSP-J/S 2024第一轮认证泄题后续进展及疑问,河北某学校也被学生实名举报泄题,河北某同学在认证前一天以非正当手段获得了认证题目且属实&#x…

(C语言贪吃蛇)16.贪吃蛇食物位置随机(完结撒花)

目录 前言 修改方向 修改内容 效果展示 两个新的问题🙋 1.问题1 2.问题2 代码如下: 前言 我们上一节实现了贪吃蛇吃食物身体节点变长,但是食物的刷新位置不是随机的,并且初始化几次后食物就刷不见了,本节我们就来…

论文阅读笔记-How to Fine-Tune BERT for Text Classification?

前言 How to Fine-Tune BERT for Text Classification? 预训练语言模型很强,通过微调可以给你的任务模型带来明显的提升,但是针对具体的任务如何进行微调使用,就涉及到了考经验积累的tricks,最近在打文本相关的比赛,正好用预训练模型为基础构建下游任务模型,所以着重的…

qemu模拟arm64环境-构建6.1内核以及debian12

一、背景 手头没有合适的arm64开发板,但是需要arm的环境,于是想到qemu模拟一个。除了硬件交互以外,软件层面的开发还是都可以实现的。 虚拟机还能自定义内存大小和镜像大小,非常适合上板前的验证,合适的话再买也不迟。…

C++面向对象:继承!

前言 继承是面向对象三大特性之一,所有的面向对象的语言都具备这三个性质,我们之前已经介绍过了封装的相关概念,今天我们来学习一下第二大特性:继承。 一.继承的概念 什么是继承? 定义:继承(…

第十二届蓝桥杯嵌入式省赛程序设计题解析(基于HAL库)(第一套)

一.题目分析 (1).题目 (2).题目分析 1.串口功能分析 a.串口接收车辆出入信息:通过查询车库的车判断车辆是进入/出去 b.串口输出计费信息:输出编号,时长和费用 c.计算停车时长是难点&#x…

【IO】多路转接Select

一、初识 select 系统提供 select 函数来实现多路复用输入/输出模型. select 系统调用是用来让我们的程序监视多个文件描述符的状态变化的;程序会停在 select 这里等待&#xff0c;直到被监视的文件描述符有一个或多个发生了状态改变; select 函数原型 C #include <sys/…

Python+Django微信小程序前后端人脸识别登录注册

程序示例精选 PythonDjango微信小程序前后端人脸识别登录注册 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《PythonDjango微信小程序前后端人脸识别登录注册》编写代码&#xff0c;代码整…

基于SpringBoot+Vue+MySQL的在线学习交流平台

系统展示 用户前台界面 管理员后台界面 系统背景 随着互联网技术的飞速发展&#xff0c;在线学习已成为现代教育的重要组成部分。传统的面对面教学方式已无法满足广大学习者的需求&#xff0c;特别是在时间、地点上受限的学习者。因此&#xff0c;构建一个基于SpringBoot、Vue.…

2024年最新大模型LLM学习路径全解析!看完你就是LLM大师

ChatGPT的出现在全球掀起了AI大模型的浪潮&#xff0c;2023年可以被称为AI元年&#xff0c;AI大模型以一种野蛮的方式&#xff0c;闯入你我的生活之中。 从问答对话到辅助编程&#xff0c;从图画解析到自主创作&#xff0c;AI所展现出来的能力&#xff0c;超出了多数人的预料&…

华为eNSP:端口隔离

一&#xff0c;什么是端口隔离 端口隔离是一种网络配置技术&#xff0c;用于将不同的网络设备或用户隔离在不同的虚拟局域网&#xff08;VLAN&#xff09;中&#xff0c;以实现网络流量的隔离和安全性提升。通过在交换机或路由器上配置端口隔离&#xff0c;可以将连接到同一设…

Java多线程(2)—线程创建

Java多线程(2)—线程创建 一、线程创建简介 在Java中&#xff0c;创建线程可以通过两种主要方式&#xff1a;继承 Thread​ 类、实现 Runnable​ 、实现Callable ​接口和线程池。 ​ ‍ 二、创建方式 2.1 继承 Thread 类 示例1 ♠①&#xff1a;创建一个类继承 Thread…

【工程测试技术】第6章 信号处理初步,频谱分析,相关系数

目录 6.1 数字信号处理的基本步骤 6.2 离散信号及其频谱分析 6.2.1 概述 6.2.2 时域采样、混叠和采样定理 6.2.3 量化和量化误差 6.2.4 截断、泄漏和窗函数 6.2.5 频域采样、时域周期延拓和栅栏效应 6.2.6 频率分辨率、整周期截断 6.3 相关分析及其应用 6.3.1 两…

前端学习第二天笔记 CSS选择 盒子模型 浮动 定位 CSS3新特性 动画 媒体查询 精灵图雪碧图 字体图标

CSS学习 CSS选择器全局选择器元素选择器类选择器ID选择器合并选择器 选择器的优先级字体属性背景属性文本属性表格属性表格边框折叠边框表格文字对齐表格填充表格颜色 关系选择器后代选择器子代选择器相邻兄弟选择器通用兄弟选择器 CSS盒子模型弹性盒子模型父元素上的属性flex-…

STM32三种启动模式:【详细讲解】

STM32在上电后&#xff0c;从那里启动是由BOOT0和BOOT1引脚的电平决定的&#xff0c;如下表&#xff1a; BOOT模式选引脚启动模式BOOT0BOOT1X0主Flash启动01系统存储器启动11内置SRAM启动 BOOT 引脚的值在重置后 SYSCLK 的第四个上升沿时被锁定。在重置后,由用户决定是如何设…

基于springboot vue3 在线考试系统设计与实现 源码数据库 文档

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm springcloud等开发框架&#xff09; vue .net php phython node.js uniapp小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆…

基于元神操作系统实现NTFS文件操作(六)

1. 背景 本文主要介绍$Root元文件属性的解析。先介绍元文件各属性的属性体构成&#xff0c;然后结合读取到的元文件内容&#xff0c;对测试磁盘中目标分区的根目录进行展示。 2. $Root元文件属性的解析 使用每个属性头偏移0x04-0x07处的值可以从第一个属性开始依次定位下一个…

一款基于 Java 的可视化 HTTP API 接口快速开发框架,干掉 CRUD,效率爆炸(带私活源码)

平常我们经常需要编写 API&#xff0c;但其实常常只是一些简单的增删改查&#xff0c;写这些代码非常枯燥无趣。 今天给大家带来的是一款基于 Java 的可视化 HTTP API 接口快速开发框架&#xff0c;通过 UI 界面编写接口&#xff0c;无需定义 Controller、Service、Dao 等 Jav…

在线教育的未来:SpringBoot技术实现

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理微服务在线教育系统的相关信息成为必然。开…