运筹学练习Python精解——动态规划

news/2024/10/3 10:45:09

练习1

设国家拨给60万元投资,供四个工厂扩建使用,每个工厂扩建后的利润与投资额的大小有关,投资后的利润函数如下表所示,试给出收益最大的投资计划。

利润\投资 0 10 20 30 40 50 60
\(g_1(r)\) 0 20 50 65 80 85 85
\(g_2(x)\) 0 20 40 50 55 60 65
\(g_3(x)\) 0 25 60 85 100 110 115
\(g_4(x)\) 0 25 40 50 60 65 70

初始化:初始化一个动态规划表 f 和一个决策表 decisionf 用于存储最大利润,decision 用于记录每个工厂的最佳投资决策。
递归计算
- 对于每个工厂\(i\)从1到4。
- 对于每个可能的投资金额 \(j\) 从0到60。
- 对于每个可能分配给当前工厂\(i\)的投资金额 \(k\)(以10为步长),使用递归关系计算最大利润,并记录最佳决策。
回溯最优解
- 从决策表 decision 中回溯,找到每个工厂的最佳投资方案。

import numpy as np# 表中的利润函数
g = np.array([[0, 20, 50, 65, 80, 85, 85],[0, 20, 40, 50, 55, 60, 65],[0, 25, 60, 85, 100, 110, 115],[0, 25, 40, 50, 60, 65, 70]
])# 工厂数量和总投资
num_factories = 4
total_investment = 60# 初始化DP表和决策表
f = np.zeros((num_factories + 1, total_investment + 1))
decision = np.zeros((num_factories + 1, total_investment + 1), dtype=int)# 填充DP表和决策表
for i in range(1, num_factories + 1):for j in range(total_investment + 1):max_profit = 0best_k = 0for k in range(0, min(j, 60) + 1, 10):  # 考虑以10为步长的投资current_profit = f[i-1][j-k] + g[i-1][k//10]if current_profit > max_profit:max_profit = current_profitbest_k = kf[i][j] = max_profitdecision[i][j] = best_k# 回溯找到最优解
investment_plan = []
remaining_investment = total_investment
for i in range(num_factories, 0, -1):invest_in_current_factory = decision[i][remaining_investment]investment_plan.append(invest_in_current_factory)remaining_investment -= invest_in_current_factoryinvestment_plan.reverse()  # 反转投资计划,按工厂顺序输出
max_profit = f[num_factories][total_investment]print(max_profit, investment_plan)
# 160.0 [20, 0, 30, 10]

练习2

求解下面背包问题的最优解。

\[\max \quad z = 8x_1 + 5x_2 + 12x_3 \\ \begin{aligned} s.t.\quad & 3x_1 + 2x_2 + 5x_3 \leq 5 \\ & x_1, x_2, x_3 \geq 0 \quad 整数 \end{aligned} \]

  

def knapsack(values, weights, capacity):n = len(values)dp = [[0] * (capacity + 1) for _ in range(n + 1)]for i in range(1, n + 1):for w in range(capacity + 1):if weights[i-1] <= w:dp[i][w] = max(dp[i-1][w], dp[i-1][w-weights[i-1]] + values[i-1])else:dp[i][w] = dp[i-1][w]# 回溯找到最优解w = capacityitems_selected = [0] * nfor i in range(n, 0, -1):if dp[i][w] != dp[i-1][w]:items_selected[i-1] = 1w -= weights[i-1]max_value = dp[n][capacity]return max_value, items_selectedvalues = [8, 5, 12]
weights = [3, 2, 5]
capacity = 5max_value, items_selected = knapsack(values, weights, capacity)print(f"最大价值: {max_value}")
print(f"选中的物品: {items_selected}")
#最大价值: 13;选中的物品: [1, 1, 0]

练习3

A地到 E 地要铺设一条煤气管道,其中需经过三级中间站,两点之间的连线上的数字表示距离。如图所示,问应该选择什么路线,使总距离最短?

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

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

相关文章

基本技巧——哈夫曼树 学习笔记

基本技巧——哈夫曼树 学习笔记基本技巧——哈夫曼树 学习笔记 概念 一棵包含有 \(n\) 个叶子节点的 \(k\) 叉树,其中第 \(i\) 个叶子节点带有权值 \(W_i\)。 树的带权路径长度,定义为从根结点到各叶结点的路径长度与相应叶节点权值的乘积之和。 树的带权路径长度,记为 WPL(…

盘点 Spring Boot 解决跨域请求的几种办法

熟悉 web 系统开发的同学,对下面这样的错误应该不会太陌生。之所以会出现这个错误,是因为浏览器出于安全的考虑,采用同源策略的控制,防止当前站点恶意攻击 web 服务器盗取数据。 01、什么是跨域请求 同源策略,简单的说就是当浏览器访问 web 服务器资源时,只有源相同才能正…

基于正点原子ZYNQ7020的RTSP摄像头视频流获取

记录如何修改,编译定制化petalinux镜像,实现PS端和PL端互通硬件描述 硬件需求ZYNQ7020 系列 LCD 显示屏 800*600rtsp 网口摄像头接线方式USB_UART 通过 type-c 线连接电脑,电脑需要安装 CH340 的串口驱动 ps 端网口和摄像头的网口连接 开发板和摄像头的电源线连接 LCD 显示屏的…

移动平台开发综合实践 安卓android大作业-雷net在线对战

转自我的安卓课程作业 图片应该是没了,懒得搞了目录移动平台开发综合实践 大作业-雷net在线对战一、实验目的二、实验环境三、实验内容与实验要求3.1实验内容:雷net在线对战3.1.1棋盘3.1.2棋子3.1.3终端卡3.2原理分析3.3具体实验要求四、实验过程与分析4.1实验记录4.1.1 Sock…

解析Html Canvas的卓越性能与高效渲染策略

一、什么是Canvas 想必学习前端的同学们对Canvas 都不陌生,它是 HTML5 新增的“画布”元素,可以使用JavaScript来绘制图形。 Canvas元素是在HTML5中新增的标签用于在网页实时生成图像,并且可以操作图像内容,基本上它是一个可以用JavaScript操作的位图(bitmap)。Canvas 由…

怎么控制多个存储设备的访问权限?数据安全存储方案来了

数据安全存储是指将数据以安全的方式存储在存储系统中,以确保数据的机密性、完整性和可用性。要控制数据安全存储的权限以保障安全,可以采取以下措施:访问控制列表(ACLs):使用ACLs来定义对存储数据的访问权限。ACLs允许你为每个文件或目录指定哪些用户或组有权访问它们,…

GPT-4o 只是对话式 Al 的冰山一角,背后隐藏了哪些新机会?(内含福利) | 编码人声

「编码人声」是由「RTE开发者社区」策划的一档播客节目,关注行业发展变革、开发者职涯发展、技术突破以及创业创新,由开发者来分享开发者眼中的工作与生活。 听友福利 欢迎在小宇宙播客评论区留言,分享你对 GPT-4o 的看法,或者对最有潜力的对话式 AI 场景的预测。我们将抽出…

一个开源的快速准确地将 PDF 转换为 markdown工具

大家好,今天给大家分享的是一个开源的快速准确地将 PDF 转换为 markdown工具。 Marker是一款功能强大的PDF转换工具,它能够将PDF文件快速、准确地转换为Markdown格式。这款工具特别适合处理书籍和科学论文,支持所有语言的转换,并且能够去除页眉、页脚等干扰元素,格式化表格…