当前位置:首页 » 编程语言 » python规划

python规划

发布时间: 2025-07-09 18:30:49

1. python之动态规划算法

动态规划算法中是将复杂问题递归分解为子问题,通过解决这皮拆些子问题来解决复杂问题。与递归算法相比,动态编程减少了堆栈的使用,避免了重复的计算,效率得到显着提升。

先来看一个简单的例子,斐波那契数列.

斐波那契数列的定义如下。

斐波那契数列可以很容易地用递归算法实现:

上述代码,随燃旁枣着n的增加,计算量呈指数级增长,算法的时间复杂度是 。

采用动态规划算法,通过自下而上的计算数列的值,可以使算法复杂度减小到 ,代码如下。

下面我们再看一个复杂一些的例子。

这是小学奥数常见的硬币问题: 已知有1分,2分,5分三种硬币数量不限,用这些硬币凑成为n分钱,那么一共有多少种组合方法。

我们将硬币的种类用列表 coins 定义;
将问题定义为一个二维数组 dp,dp[amt][j] 是使用 coins 中前 j+1 种硬币( coins[0:j+1] )凑成总价amt的组合数。

例如: coins = [1,2,5]

dp[5][1] 就是使用前两种硬币 [1,2] 凑成总和为5的组合数。

对于所有的 dp[0][j] 来说,凑成总价为0的情况只有一种,就是所有的硬币数量都为0。所以对于在有效范围内任意的j,都有 dp[0][j] 为1。

对于 dp[amt][j] 的计算,也就是使用 coins[0:j+1] 硬币总价amt的组合数,包含两种情况计算:

1.当使用第j个硬币时,有 dp[amt-coins[j]][j] 种情况,即amt减去第j个硬币币值,使用前j+1种硬币的组合数;

2.当不使用第j个硬币时,有 dp[amt][j-1] 种情况,即使用前j种硬币凑成amt的组合数;

所以: dp[amt][j] = dp[amt - coins[j]][j]+dp[amt][j-1]

我们最终得到的结果是:dp[amount][-1]

上述分析省略了一些边界情况。

有了上述的分析,代码实现就比较简单了。

动态规划算法代码简洁,执行效率高。但是与递归算法相比,需要仔细考虑如何分解问题,动态规划代码与递归调用相比,较难理解。

我把递归算法启瞎实现的代码也附在下面。有兴趣的朋友可以比较一下两种算法的时间复杂度有多大差别。

上述代码在Python 3.7运行通过。

2. gurobi 高效数学规划引擎 | python3 配置、使用及建模实例

本文源自github文章 wurmen/Gurobi-Python,并在此基础上进行衍生扩展。独立第三方优化器评估报告显示,Gurobi以卓越的性能跻身大规模优化器新领袖地位,成为性价比最为优秀的企业大规模优化器首选。Gurobi是由美国Gurobi Optimization公司开发的新一代大规模优化器。无论在生产制造领域,还是在金融、保险、交通、服务等其他各种领域,当实际问题越来越复杂、问题规模越来越庞大的时候,我们需要一个经过证明可以信赖的大规模优化工具,为我们的决策提供质量保证,为我们增强信心。在理论和实践中,Gurobi优化工具都被证明是全球性能领先的大规模优化器,具有突出的性价比,可以为客户在开发和实施中极大降低成本。

Gurobi可以解决的数学问题包括:线性问题、二次型目标问题、混合整数线性和二次型问题等几乎能解决lingo能解决的问题。

获取Gurobi:
- 登陆官网:gurobi.com/index
- 注册帐号,后续会收到验证邮箱,点击邮箱连接激活账号即可。
- 安装Gurobi与申请License:
- 进入下载中心,下载Gurobi引擎,申请学术许可证。
- 验证License:win下在Win + R键输入License进行验证,mac下在终端中输入相同命令,黑苹果因网卡问题,不能通过验证。
- 安装Gurobi模块:安装Anaconda3,并正确配置conda环境后,在cmd中输入相关指令添加Gurobi地址、安装模块。

快速入门:
- 若读者有较好的python迭代器、生成器习惯,在编写程序时能大大简化。
- 利用Python+Gurobi建立数学规划模型通常按顺序进行:设置变量、更新变量空间、设置目标函数、设置约束条件、执行最优化。
- 辅助函数包括列表推导式/列表解析式、quicksum()、multidict()、tuplelist()、prod()和sum()下标聚合等。
- 添加决策变量使用Model.addVar()和Model.addVars()方法,添加目标函数使用Model.setObjective()和Model.setObjectiveN()方法,添加约束条件使用Model.addConstr()和Model.addConstrs()方法。
- 执行最优化使用Model.optimize()方法。

案例:
- 一般线性规划问题:[公式]
- 利用整数线性规划最优化员工工作表:[公式]
- 非平衡指派问题:[公式]
- LP问题与灵敏度分析:[公式]
- 解数独:决策变量[公式],约束条件[公式]等。
- 求解 CCR-DEA问题:[公式]
- 其他案例:[公式]

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:593
制作脚本网站 发布:2025-10-20 08:17:34 浏览:888
python中的init方法 发布:2025-10-20 08:17:33 浏览:581
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:765
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:684
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1012
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:255
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:113
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:806
python股票数据获取 发布:2025-10-20 07:39:44 浏览:712