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

news2024/11/28 22:33:10

一、学习内容

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.coloradmin.cn/o/2192156.html

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

相关文章

MCU8.C51的一些知识补充

由于绝大部分的C语言知识已在C语言学习笔记专栏 点我跳转讲过,本文补充一些没有提到过的(C51标准) 1.C51扩充数据类型 sfr:特殊功能寄存器(special function register) sbit:是特殊功能寄存器(sfr)中的一个位的地址,用于直接定义和访问单个引脚的状态 sfr16:16位特殊功能寄存…

普通程序员如何入手学习大模型(LLM)附学习路线和资源教程

在人工智能(AI)飞速发展的今天,掌握AI技术已经成为了许多高校研究者和职场人士的必备技能。从深度学习到强化学习,从大模型训练到实际应用,AI技术的广度和深度不断拓展。作为一名AI学习者,面对浩瀚的知识海…

深度学习----------------------注意力机制

目录 心理学不随意线索随意线索 注意力机制非参注意力池化层Nadaraya-Watson核回归参数化的注意力机制 总结注意力汇聚:Nadaraya-Watson核回归代码生成数据集核回归非参数注意力汇聚注意力权重该部分总代码 带参数的注意力汇聚将训练数据集转换为键和值训练带参数的…

双11买什么东西比较好?买什么?这份双十一好物清单请查收

​双十一购物节是每年最大的购物狂欢节,很多商品都通过一定的优惠活动进行促销!只不过有些朋友不知道这么大的活动力度,有哪些好物值得放心入手的!于是小编根据这些年在双十一的选购经验,整理了一些实用的购物攻略建议…

新手入门大语言模型学习路线

最近有很多同学想要学习大模型,于是我根据多年的学习经验,总结了一些适合你从 0 到 1 的入门经验,分享给大家呀 1、几个学习大模型必备: 教程:动手学大模型Dive into LLMs 《动手学大模型 Dive into LLMs》:内容丰富&#xff0c…

Linux运维02:WM虚拟机安装Centos7操作系统

Centos7镜像文件下载链接:centos-7-isos-x86_64安装包下载_开源镜像站-阿里云 (aliyun.com)https://mirrors.aliyun.com/centos/7/isos/x86_64/ 1.点击“编辑虚拟机设置”、点击“CD/DVD”、点击“预览”选择镜像文件位置,点击“确定”; 2.点…

【STL】list模拟实现(画图万字解析+代码)

list模拟实现 1 模块分析1.1 list的结构1.2 ListNode的结构1.3 迭代器类 2 ListNode节点设计3 迭代器类设计3.1 迭代器类框架3.2 模板设计3.3 operator()前置和后置3.4 operator--()前置--和后置--3.4 operator*()3.5 operator->()3.6 operator!() 和 operator()3.7 迭代器类…

一张照片变换古风写真,Flux如何做到?

前言 解锁图像创作新体验:ComfyUI指南 在AI图像生成领域,ComfyUI 已成为不可忽视的力量。它是基于Stable Diffusion的图像生成工具,提供了一个节点式图形用户界面(GUI),让用户可以通过简单的拖拽与配置来…

睡眠对于生活的重要性

在快节奏的现代生活中,健康养生不再是遥不可及的概念,而是融入日常每一刻的必需。其中,睡眠作为生命不可或缺的环节,其重要性往往被忽视,实则它是身体修复、能量积蓄的黄金时段。今天,让我们深入探讨“健康…

【橙子老哥】.NetCore 管道模型源码深度解读

hello,大家好,今天又是橙子老哥的分享时间,希望大家一起学习,一起进步。 欢迎加入.net意社区,第一时间了解我们的动态,地址:ccnetcore.com 最近遇到很多小伙伴们问我,自己会.netfr…

【电力系统】Matlab|含风电-光伏-光热电站电力系统N-k安全优化调度模型

摘要 本文提出了一种结合风电、光伏与光热电站的电力系统N-k安全优化调度模型。通过在电力系统中集成多种可再生能源发电技术,优化不同类型电源的调度策略,确保在N-k故障情景下系统的稳定运行。基于Matlab仿真,本文分析了可再生能源发电的功…

路由:ReactRouter

概述 一个路径path对应一个组件component 当我们在浏览器中访问一个path的时候,path对应的组件会在页面中进行渲染。 使用 快速开始 安装依赖 npm i react-router-dom基本使用 import { createBrowserRouter, RouterProvider } from react-router-domconst ro…

【JavaEE初阶】多线程案列之定时器的使用和内部原码模拟

前言: 🌈上期博客:【JavaEE初阶】深入理解多线程阻塞队列的原理,如何实现生产者-消费者模型,以及服务器崩掉原因!!!-CSDN博客 🔥感兴趣的小伙伴看一看小编主页&#xff1…

房地产销售|基于springBoot的房地产销售管理系统设计与实现(附项目源码+论文+数据库)

私信或留言即免费送开题报告和任务书(可指定任意题目) 目录 一、摘要 二、相关技术 三、系统设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取 一、摘要 社会和科技的不断进步带来更便利的生活,计算机技术也越来…

fiddler抓包18-2_导出jmeter、postman脚本(带请求头)

课程大纲 1. Fiddler导出请求为curl脚本 选中请求,“文件” - “导出会话” - “选中的会话” - “cURL Script”。 2. 导入jmeter ① 复制curl脚本。 ② 打开jmeter,“工具” - “import from cURL”,粘贴脚本,勾选“Add cooki…

二分查找一>寻找峰值

1.题目&#xff1a; 2.解析&#xff1a; 暴力遍历代码&#xff1a;O(N),由于该题数据很少所以可以通过 暴力遍历&#xff1a;O(N),由于该题数据很少所以可以通过int index 0;for(int i 1; i < nums.length-1; i) {//某段区域内一直递增&#xff0c;更新就indexif(nums[i]…

codetop标签树刷题(三)!!暴打面试官!!!!

用于个人复习 1.子结构判断2.寻找重复的子树3.相同的树4.平衡二叉树5.二叉树展开为链表6.将二叉搜索树转化为排序的双向链表7.验证二叉搜索树8.二叉树的完全性检验9.完成二叉树的节点个数10.删除二叉搜索树中的节点11.寻找二叉树中的目标节点 1.子结构判断 给定两棵二叉树 tre…

Libtorch学习之Libtorch-VS2019-图像分割程序

文章目录 环境说明Pytorch 序列化Libtorch 下载VS配置主程序可能遇到的问题参考 环境说明 win10 VS2019 OPENCV4.7.0 Litorch1.13 Pytorch 1.12.1 Pytorch 序列化 import torch from torchvision.models import resnet50 net resnet50(pretrainedTrue) net net.cuda() net…

提升开机速度:有效管理Windows电脑自启动项,打开、关闭自启动项教程分享

日常使用Windows电脑时&#xff0c;总会需要下载各种各样的办公软件。部分软件会默认开机自启功能&#xff0c;开机启动项是指那些在电脑启动时自动运行的程序和服务。电脑开机自启太多的情况下会导致电脑卡顿&#xff0c;开机慢&#xff0c;运行不流畅的情况出现&#xff0c;而…

如何从计算机的硬盘中恢复照片 - 成功

如何从计算机硬盘恢复图片&#xff1f; 与所有电子和机械设备一样&#xff0c;硬盘驱动器也可能由于任何原因而死机。如果您的系统硬盘驱动器已停止工作或在启动系统时听到振动声&#xff0c;则它有可能已死机。如果是这样的话&#xff0c;上面的数据呢&#xff1f; 不要惊慌…