数学建模期末速成 多目标规划

news2025/6/5 2:48:45

内容整理自2-6-2 运筹优化类-多目标规划模型Python版讲解_哔哩哔哩_bilibili

求有效解的几种常用方法

  • 线性加权法√
    根据目标的重要性确定一个权重,以目标函数的加权平均值为评价函数,使其达到最优。
  • ɛ约束法
    根据决策者的偏好,选择一个主要关注的参考目标
  • 理想点法
    以每个单目标最优解为该目标的理想值,使每个目标函数值与理想值得差得加权平方和最小
  • 优先级法
    先求优先级高的目标函数的最优值,在确保优先级高的目标获得不低于最优解的条件下,再求优先级低的目标函数

例题:化工厂生产问题

某化工厂今年拟生产两种新产品A和B,其生产费用分别为2万元/吨和5万元/吨。这两种产品均将造成环境污染,每生产一吨A产品会产生0.4吨的污染,每生产一吨B产品会产生0.3吨的污染。由于条件限制,工厂生产产品A和B的最大生产能力各为每月5吨和6吨,而市场需要这两种产品的总量每月不少于7吨。该工厂决策认为,这两个目标中环境污染应该优先考虑,且根据经验生产费用的参考值为30万元,污染量参考值为2吨。试问工厂如何安排生产计划,在满足市场需要的前提下,使设备的花费和产生的污染均达到最小。

解:设工厂每月产品A生产 x 1 x_1 x1吨,B生产 x 2 x_2 x2吨,那么产生的污染分别为0.4 x 1 x_1 x1吨和0.3 X 2 X_2 X2

{ min ⁡ f 1 = 2 x 1 + 5 x 2 min ⁡ f 2 = 0.4 x 1 + 0.3 x 2 s t . { x 1 + x 2 ≥ 7 0 ≤ x 1 ≤ 5 0 ≤ x 2 ≤ 6 \begin{cases}\min f_1=2x_1+5x_2\\\min f_2=0.4x_1+0.3x_2\\st.\begin{cases}x_1+x_2\geq7\\0\leq x_1\leq5\\0\leq x_2\leq6\end{cases}\end{cases} minf1=2x1+5x2minf2=0.4x1+0.3x2st. x1+x270x150x26

[!info]
st.subject to,即约束条件的缩写

下面将其转换为一个单目标规划问题,即对上面的两个目标函数进行加权,由于该工厂决策认为环境污染应优先考虑,因此我们可以选取f1和f2的权重分别为0.4和0.6。注意到两个目标函数的单位不同,一个为“万元”,一个为“吨”,因此需要首先对目标函数进行标准化来消除量纲的影响,然后再进行加权,由于题目中已经给了产品费用和污染量的参考值,因此我们将这两个目标函数分别处以其参考值来消除量纲。

加权组合后的目标函数
f = 0.4 × f 1 30 + 0.6 × f 2 2 = 0.4 30 × ( 2 x 1 + 5 x 2 ) + 0.6 2 × ( 0.4 x 1 + 0.3 x 2 ) f=0.4\times\frac{f_{1}}{30}+0.6\times\frac{f_{2}}{2}=\frac{0.4}{30}\times(2x_{1}+5x_{2})+\frac{0.6}{2}\times(0.4x_{1}+0.3x_{2}) f=0.4×30f1+0.6×2f2=300.4×(2x1+5x2)+20.6×(0.4x1+0.3x2)
得到一个单目标规划问题,通过linprog函数进行求解可以得到
x 1 = 5   , x 2 = 2   , f 1 = 20   , f 2 = 2.6 x_{1}=5\:,x_{2}=2\:,f_{1}=20\:,f_{2}=2.6 x1=5,x2=2,f1=20,f2=2.6

敏感性分析

下面对结果进行敏感性分析,敏感性分析是指从定量分析的角度研究有关因素发生某种变化对某一个或一组关键指标影响程度的一种不确定分析技术。其实质是通过逐一改变相关变量数值的方法来解释关键指标受这些因素变动影响大小的规律。

附 Python代码

import numpy as np
from scipy.optimize import linprog
import matplotlib.pyplot as plt
from matplotlib import rcParams

# ======= 多目标规划问题 =======
# 两个目标函数的权重以及对应的x1和X2的值
weights = [
    (0.4, 0.6),  # w1=0.4, w2=0.6
    (0.5, 0.5),  # w1=0.5, w2=0.5
    (0.3, 0.7),  # w1=0.3, w2=0.7
]

# 定义约束条件
A = [[-1, -1]]  # 不等式约束A*x <= b
b = [-7]
lb = [0, 0]     # 下界
ub = [5, 6]     # 上界
bounds = [(lb[0], ub[0]), (lb[1], ub[1])]

# 遍历不同权重组合,求解线性规划
for w1, w2 in weights:
    # 构造目标函数系数
    c = [w1/30*2 + w2/2*0.4, w1/30*5 + w2/2*0.3]
    # 求解线性规划
    result = linprog(c, A_ub=A, b_ub=b, bounds=bounds, method='highs')
    x = result.x  # 变量X的最优解
    fval = result.fun  # 目标函数的最优值
    # 计算目标函数值
    f1 = 2 * x[0] + 5 * x[1]
    f2 = 0.4 * x[0] + 0.3 * x[1]
    # 打印结果
    print(f"\n权重组合:w1={w1}, w2={w2}")
    print(f"最优解:x1={x[0]:.2f}, x2={x[1]:.2f}")
    print(f"目标函数值:f1={f1:.2f}, f2={f2:.2f}, 综合指标={fval:.2f}")

# ======= 敏感性分析 =======
# 权重范围
W1 = np.arange(0.1, 0.501, 0.001)
W2 = 1 - W1
n = len(W1)
# 初始化结果存储数组
F1 = np.zeros(n)
F2 = np.zeros(n)
X1 = np.zeros(n)
X2 = np.zeros(n)
FVAL = np.zeros(n)

# 遍历不同权重,执行敏感性分析
for i in range(n):
    w1 = W1[i]
    w2 = W2[i]
    c = [w1/30*2 + w2/2*0.4, w1/30*5 + w2/2*0.3]  # 修正此处
    # 求解线性规划
    result = linprog(c, A_ub=A, b_ub=b, bounds=bounds, method='highs')
    x = result.x
    F1[i] = 2 * x[0] + 5 * x[1]
    F2[i] = 0.4 * x[0] + 0.3 * x[1]
    X1[i] = x[0]
    X2[i] = x[1]
    FVAL[i] = result.fun

# ======= 绘图 =======
# 设置字体为支持中文的字体,例如SimHei(黑体)
rcParams['font.sans-serif'] = ['SimHei']  # 选择黑体
rcParams['axes.unicode_minus'] = False    # 解决负号显示问题

# 图1:权重与目标函数的关系
plt.figure()
plt.plot(W1, F1, label='f1')
plt.plot(W1, F2, label='f2')
plt.xlabel("f1的权重(w1)")
plt.ylabel("目标函数值")
plt.legend()
plt.title("目标函数值随权重变化的关系")
plt.grid()

# 图2:权重与决策变量的关系
plt.figure()
plt.plot(W1, X1, label='x1')
plt.plot(W1, X2, label='x2')
plt.xlabel("f1的权重(w1)")
plt.ylabel("决策变量值")
plt.legend()
plt.title("决策变量随权重变化的关系")
plt.grid()

# 图3:权重与综合指标的关系
plt.figure()
plt.plot(W1, FVAL)
plt.xlabel("f1的权重(w1)")
plt.ylabel("综合指标值")
plt.title("综合指标随权重变化的关系")
plt.grid()

# 显示所有图
plt.show()

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

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

相关文章

深度学习与神经网络 前馈神经网络

1.神经网络特征 无需人去告知神经网络具体的特征是什么&#xff0c;神经网络可以自主学习 2.激活函数性质 &#xff08;1&#xff09;连续并可导&#xff08;允许少数点不可导&#xff09;的非线性函数 &#xff08;2&#xff09;单调递增 &#xff08;3&#xff09;函数本…

NLP学习路线图(十四):词袋模型(Bag of Words)

在自然语言处理&#xff08;NLP&#xff09;的广阔天地中&#xff0c;词袋模型&#xff08;Bag of Words, BoW&#xff09; 宛如一块历经岁月沉淀的基石。它虽非当今最耀眼的明星&#xff0c;却为整个领域奠定了至关重要的基础&#xff0c;深刻影响了我们让计算机“理解”文本的…

鸿蒙进阶——Mindspore Lite AI框架源码解读之模型加载详解(一)

文章大纲 引言一、模型加载概述二、核心数据结构三、模型加载核心流程 引言 Mindspore 是一款华为开发开源的AI推理框架&#xff0c;而Mindspore Lite则是华为为了适配在移动终端设备上运行专门定制的版本&#xff0c;使得我们可以在OpenHarmony快速实现模型加载和推理等功能&…

【数据结构】图论核心算法解析:深度优先搜索(DFS)的纵深遍历与生成树实战指南​

深度优先搜索 导读&#xff1a;从广度到深度&#xff0c;探索图的遍历奥秘一、深度优先搜索二、算法思路三、算法逻辑四、算法评价五、深度优先生成树六、有向图与无向图结语&#xff1a;深潜与回溯&#xff0c;揭开图论世界的另一面 导读&#xff1a;从广度到深度&#xff0c;…

RESTful APInahamcon Fuzzies-write-up

RESTful API 路径详解 RESTful API&#xff08;Representational State Transfer&#xff09;是一种 基于 HTTP 协议的 API 设计风格&#xff0c;它通过 URL 路径 和 HTTP 方法&#xff08;GET、POST、PUT、DELETE 等&#xff09;来定义资源的访问方式。它的核心思想是 将数据…

2025年机械化设计制造与计算机工程国际会议(MDMCE 2025)

2025年机械化设计制造与计算机工程国际会议&#xff08;MDMCE 2025&#xff09; 2025 International Conference on Mechanized Design, Manufacturing, and Computer Engineering 一、大会信息 会议简称&#xff1a;MDMCE 2025 大会地点&#xff1a;中国贵阳 审稿通知&#…

Jmeter逻辑控制器、定时器

目录 一、Jmeter逻辑控制器 ①IF(如果)控制器 作用&#xff1a; 位置&#xff1a; 参数介绍&#xff1a; 步骤&#xff1a; ②循环控制器 作用&#xff1a; 位置&#xff1a; 步骤&#xff1a; 线程组属性VS循环控制器 ③ForEach控制器 作用&#xff1a; 位置&am…

R3GAN利用配置好的Pytorch训练自己的数据集

简介 简介:这篇论文挑战了"GANs难以训练"的广泛观点,通过提出一个更稳定的损失函数和现代化的网络架构,构建了一个简洁而高效的GAN基线模型R3GAN。作者证明了通过合适的理论基础和架构设计,GANs可以稳定训练并达到优异性能。 论文题目:The GAN is dead; long l…

吴恩达机器学习笔记(1)—引言

目录 一、欢迎 二、机器学习是什么 三、监督学习 四、无监督学习 一、欢迎 机器学习是当前信息技术领域中最令人兴奋的方向之一。在这门课程中&#xff0c;你不仅会学习机器学习的前沿知识&#xff0c;还将亲手实现相关算法&#xff0c;从而深入理解其内部机理。 事实上&…

【笔记】Windows 部署 Suna 开源项目完整流程记录

#工作记录 因篇幅有限&#xff0c;所有涉及处理步骤的详细处理办法请参考文末资料。 Microsoft Windows [Version 10.0.27868.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗…

【Elasticsearch】Elasticsearch 核心技术(一):索引

Elasticsearch 核心技术&#xff08;一&#xff09;&#xff1a;索引 1.索引的定义2.索引的命名规范3.索引的增、删、改、查3.1 创建索引3.1.1 创建空索引 3.2 删除索引3.3 文档操作3.3.1 添加/更新文档&#xff08;指定ID&#xff09;3.3.2 添加文档&#xff08;自动生成ID&am…

Fullstack 面试复习笔记:操作系统 / 网络 / HTTP / 设计模式梳理

Fullstack 面试复习笔记&#xff1a;操作系统 / 网络 / HTTP / 设计模式梳理 面试周期就是要根据JD调整准备内容&#xff08;挠头&#xff09;&#xff0c;最近会混合复习针对全栈这块的内容&#xff0c;目前是根据受伤的JD&#xff0c;优先选择一些基础的操作系统、Java、Nod…

中科院报道铁电液晶:从实验室突破到多场景应用展望

2020年的时候&#xff0c;相信很多关注科技前沿的朋友都注意到&#xff0c;中国科学院一篇报道聚焦一项有望改写显示产业格局的新技术 —— 铁电液晶&#xff08;FeLC&#xff09;。这项被业内称为 "下一代显示核心材料" 的研究&#xff0c;究竟取得了哪些实质性进展…

智慧政务标准规范介绍:构建高效、协同的政务信息体系

在当今信息化快速发展的时代&#xff0c;智慧政务作为政府数字化转型的重要方向&#xff0c;正逐步改变着政府管理和服务的方式。为了确保智慧政务系统的建设能够有序、高效地进行&#xff0c;国家制定了一系列标准规范&#xff0c;其中GB∕T 21062系列标准《政务信息资源交换体…

手机照片太多了存哪里?

手机相册里塞满了旅行照片、生活碎片&#xff0c;每次清理都舍不得删&#xff1f;NAS——一款超实用的存储方案&#xff0c;让你的回忆安全又有序&#xff5e; 1️⃣自动备份解放双手 手机 / 电脑 / 相机照片全自动同步到 NAS&#xff0c;再也不用手动传文件 2️⃣远程访问像…

OpenRouter使用指南

OpenRouter 是一个专注于大模型&#xff08;LLM&#xff09;API 聚合和路由的服务平台&#xff0c;旨在帮助开发者便捷地访问多种主流大语言模型&#xff08;如 GPT-4、Claude、Llama 等&#xff09;&#xff0c;并提供统一的接口、成本优化和智能路由功能。以下是它的核心功能…

【优选算法 | 队列 BFS】构建搜索流程的核心思维

算法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;双指针滑动窗口二分查找前缀和位运算模拟链表哈希表字符串模拟栈模拟(非单调栈)优先级队列 很多人学 BFS 的时候都知道“用队列”&#xff0c;但为什么一定是队列&#xff1f;它到底在整个搜索流程中起了什么作…

设计模式(行为型)-中介者模式

目录 定义 类图结构展示 角色职责详解 模式的优缺点分析 优点 缺点 适用场景 应用实例 与其他模式的结合与拓展 总结 定义 中介者模式的核心思想可以概括为&#xff1a;用一个中介对象来封装一系列的对象交互。这个中介者就像一个通信枢纽&#xff0c;使各对象不需要…

【Java学习笔记】异常

异常&#xff08;Exception&#xff09; 一、基本介绍 在 Java 程序中&#xff0c;将运行中发生的不正常情况称为 “异常”&#xff0c;开发过程中的语法错误和运行时发生的异常情况是不一样的。 二、异常的分类 1. Error&#xff08;错误&#xff09;&#xff1a;Java 虚拟…

MySQL:视图+用户管理+访问+连接池原理

一、视图 视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff08;相当于是把查询的内容当成一个临时表来使用&#xff09;&#xff0c;视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表&#xff0c;基表的数据变化也会影响到视图。 1.1 为…