描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787301315330
理论与实践相结合,提高应用能力
算法与编程相结合,解决实际问题
数学思维 编程实践,可多方法优化求解问题
每个案例均有源代码,扫码即可下载应用
本书以理论结合编程开发为原则,使用Python作为开发语言,讲解*化算法的原理和应用,详细介绍了Python基础、Gurobi 优化器、线性规划、整数规划、多目标优化、动态规划、图与网络分析、智能优化算法。对于算法部分的每一种算法都包含原理和编程实践,使读者对*化算法的认识更加深入。
本书分为 3 篇共 9 章。第 1 篇(第 1~3 章)是*化算法与编程基础:第 1 章介绍了什么是*化算法及其在生产和生活中的应用;第 2章介绍Python编程基础和Python数据分析库及绘图库;第 3章讲解Gurobi 优化器的基础和高级特性。第 2篇(第 4~6章)是数学规划方法:第 4章详细讲解线性规划的知识,包括单纯形法、内点法、列生成法、拉格朗日乘子法、对偶问题;第 5 章讲解整数规划解法的分支定界法和割平面法;第 6 章讲解多目标优化的概念及基于单纯形法的目标规划法。第 3 篇(第 7~9 章)是启发式算法:第 7 章介绍动态规划算法;第 8 章讲解图与网络分析,介绍*小生成树、*短路径、网络流、路径规划等问题的建模;第 9 章讲解了粒子群算法和遗传算法求解各种类型优化算法问题的方法。
本书内容丰富,实例典型,实用性强,适合各个层次从事*化算法研究和应用的人员,尤其适合有一定算法基础而没有编程基础的人员阅读。
| 第1篇 化算法与编程基础 |
第1章 化算法概述 2
1.1 化算法简介 3
1.2 化算法的内容 4
1.2.1 规划论 4
1.2.2 库存论 5
1.2.3 图论 6
1.2.4 排队论 7
1.2.5 可靠性理论 8
1.2.6 对策论 8
1.2.7 决策论 8
1.2.8 搜索论 9
1.3 本章小结 9
第2章 Python编程方法 10
2.1 开发环境安装 11
2.2 编程基础:Python语法 17
2.2.1 基础数据结构与基本运算 18
2.2.2 关于Python的列表、元组、字典、集合 18
2.2.3 程序控制语句 21
2.2.4 函数 21
2.2.5 类与实例 22
2.2.6 迭代 23
2.3 数据分析:NumPy基础 24
2.3.1 NumPy基础数据结构 24
2.3.2 NumPy的随机数 26
2.3.3 NumPy矩阵运算 28
2.3.4 NumPy线性代数 31
2.4 Pandas基础 32
2.4.1 Pandas基础数据结构 32
2.4.2 Pandas基础统计函数 35
2.4.3 Pandas基础数据处理 37
2.4.4 分组统计 39
2.4.5 apply函数 41
2.5 Python绘图 42
2.5.1 常用图形 43
2.5.2 图形属性 47
2.5.3 组合图和子图 49
2.5.4 三维图 51
2.5.5 动态图 55
2.6 本章小结 57
第3章 Gurobi优化器 58
3.1 Gurobi的数据结构 59
3.1.1 Multidict 59
3.1.2 Tuplelist 60
3.1.3 Tupledict 61
3.1.4 应用范例 62
3.2 Gurobi的参数和属性 65
3.2.1 参数类型 65
3.2.2 修改参数 75
3.2.3 修改参数的例子 75
3.2.4 属性类型 77
3.2.5 查看修改属性 85
3.2.6 修改属性的例子 85
3.3 Gurobi线性化技巧 85
3.3.1 值max 86
3.3.2 小值min 88
3.3.3 值abs 89
3.3.4 逻辑与and 90
3.3.5 逻辑或or 90
3.3.6 指示函数indicator 90
3.3.7 带固定成本约束 91
3.3.8 分段线性函数 91
3.4 Gurobi多目标优化 92
3.5 callback函数 96
3.5.1 回调函数callback定义 97
3.5.2 状态where与值what 97
3.5.3 callback函数的功能 98
3.6 本章小结 102
| 第2篇 数学规划方法 |
第4章 线性规划 104
4.1 线性规划的标准型 105
4.2 单纯形法 105
4.2.1 单纯形法的原理 106
4.2.2 单纯形法的过程 106
4.2.3 单纯形法代码 111
4.3 单纯形的数学规范型 113
4.4 内点法 114
4.4.1 内点法的原理 114
4.4.2 内点法过程 115
4.4.3 内点法代码 118
4.5 列生成法 120
4.5.1 列生成法的原理 120
4.5.2 列生成的过程 123
4.6 对偶问题 126
4.6.1 对偶问题的形式 127
4.6.2 对称形式对偶 128
4.6.3 对偶单纯形 129
4.6.4 对偶问题的应用 130
4.7 拉格朗日乘子法 130
4.7.1 无约束优化 131
4.7.2 等式约束优化 131
4.7.3 不等式约束优化 132
4.7.4 拉格朗日对偶 134
4.8 本章小结 137
第5章 整数规划 138
5.1 快速掌握Gurobi整数规划 139
5.2 分支定界法 140
5.3 割平面法 142
5.4 本章小结 147
第6章 多目标优化 148
6.1 多目标优化的一般形式 149
6.2 Pareto解 149
6.3 多目标优化求解方法 151
6.4 目标规划法 152
6.4.1 偏差变量 153
6.4.2 优先等级和权重系数 153
6.4.3 目标规划单纯形法 154
6.4.4 目标规划Gurobi实现 158
6.5 NSGA-Ⅱ 159
6.6 本章小结 160
| 第3篇 启发式算法 |
第7章 动态规划 162
7.1 多阶段决策问题 163
7.2 动态规划的基本概念 164
7.3 动态规划的化原理 165
7.4 短路径问题 166
7.5 使用整数规划解短路径问题 169
7.6 背包问题 170
7.7 本章小结 175
第8章 图与网络分析 176
8.1 图的基本概念 177
8.2 图的矩阵表示 178
8.3 小生成树 179
8.4 短路径问题 183
8.5 网络流问题 187
8.6 路径规划 190
8.7 VRP问题 196
8.8 本章小结 203
第9章 智能优化算法 204
9.1 粒子群算法 205
9.1.1 粒子群算法原理 205
9.1.2 粒子群求解无约束优化问题 207
9.1.3 粒子群求解约束优化问题 211
9.1.4 粒子群求解旅行商问题 218
9.2 遗传算法 225
9.2.1 遗传算法原理 225
9.2.2 遗传算法的编码方法 227
9.2.3 遗传算法的选择操作 230
9.2.4 遗传算法求解无约束优化问题 231
9.2.5 遗传算法库Geatpy的介绍 233
9.2.6 使用Geatpy求解约束优化问题 239
9.2.7 使用Geatpy求解多目标优化问题 241
9.3 本章小结 242
为什么要写这本书?
在大数据时代,敏捷、准确的数据分析和预测将成为现实,各类大数据算法和AI(Artificial Intelligence,人工智能)算法不断涌现,在各行各业得到了广泛应用。当前大数据算法可分为两大类,一类是以统计和机器学习为代表的算法,另一类是以数学规划和启发式算法为代表的化算法。由于机器学习算法被广泛应用,对应的算法有大量的标准化工具,工程师和研究人员只需要将问题建模成算法对应的形式即可应用这些工具包。相比之下,数学规划和启发式算法则没有标准化的算法工具包可用,在建模过程中,工程师和研究人员不仅需要对问题有深入的理解,还需要编写对应的模型代码,因此,对他们的综合能力提出了更高的要求。
市场中的化算法类书籍,大多侧重算法原理的阐述,对案例的讲解也多使用手动计算的方式,在实际应用过程中往往要花费大量的时间,在问题规模较大时手动计算往往不再适用,所以这也是本书编写的初衷。在学习算法知识过程中,往往我们对书本的知识了然于胸,但尝试应用这些知识解决实际问题时却无从下手。因此,我决定写化算法的书籍,一方面介绍化算法的原理,另一方面通过代码实现化算法,将原理与实践相结合,在编程中思考算法的计算过程,并通过代码将算法应用在实际问题中,达到解决问题的目的。
本书特色
1. 理论联系实际,应用性强
本书的案例多从生活中提取,针对实际问题讲解算法原理和计算方法,使读者在阅读过程中能较好地联系实际场景,从而更容易理解本书内容。
2. 理论与编程相结合,提高应用能力
本书的定位是理论与编程相结合,因此除了理论部分的公式推导,还结合图形化方法演示各种算法的优化过程,使读者对复杂问题有一个直观的感受,可更好地理解迭代求解问题,将实际问题建模成数学问题,以及使用数学工具求解。
3. 一个问题多种方法,提高学习效率
本书中大部分例题既可以用数学规划法解决,也可以用智能优化算法解决,通过比较多种不同方法的差异,可深入理解算法原理和应用场景。
本书读者对象
从事优化计算的研究人员及工程师。
算法研究方向的开发技术人员。
希望学习化算法的人员。
希望提升算法编程能力的开发技术人员。
资源下载
本书所涉及的源代码已上传至百度网盘,供读者下载。请读者关注封底“博雅读书社”微信公众号,找到“资源下载”栏目,根据提示获取即可。
第1章
化算法概述
1.1 化算法简介
化算法,即计算方法,也是运筹学,主要介绍化问题的算法及其应用,在第二次世界大战及战后经济恢复期间,一些由多学科专家组成的运筹组织在军事决策、资源合理利用和提高生产效率等领域做出了很大贡献,他们的工作促使运筹学逐步形成一门新兴的学科,并迅速得到普及和发展。
化同运筹学一样,是利用现代数学、系统科学、计算机科学及其他学科的成果,来研究人类从事的各种活动中处理事务的数量化规律,使有限的人、物、财、时空、信息等资源得到充分和合理的利用,以期获得尽可能满意的经济和社会效果。
化算法早研究经济活动和军事活动中能用数量来表达的有关策划、管理方面的问题。随着客观实际的发展,它在生产生活中也得到了广泛的应用,经常用于解决现实生活中的复杂问题,特别是改善或优化现有系统的效率。化算法本身也在不断发展,涵盖线性规划、非线性规划、整数规划、组合规划、图论、网络流、决策分析、排队论、可靠性数学理论、仓储库存论、物流论、博弈论、搜索论和模拟等分支。
当前化算法的应用领域如下。
(1)市场销售:多应用在广告预算和媒体的选择、竞争性定价、新产品开发、销售计划的编制等方面。如美国杜邦公司在20世纪50年代起就非常重视对广告、产品定价和新产品引入的算法研究。
(2)生产计划:从总体确定生产、储存和劳动力的配合等计划以适应变动的需求计划,主要采用线性规划和仿真方法等。此外,还可用于日程表的编排,以及合理下料、配料、物料管理等方面。
(3)库存管理:存货模型将库存理论与物料管理信息系统相结合,主要应用于多种物料库存量的管理,确定某些设备的能力或容量,如工厂库存量、仓库容量、新增发电装机容量、计算机的主存储器容量、合理的水库容量等。
(4)运输问题:涉及空运、水运、陆路运输,以及铁路运输、管道运输和厂内运输等,包括班次调度计划及人员服务时间安排等问题。
(5)财政和会计:涉及预算、贷款、成本分析、定价、投资、证券管理、现金管理等,采用的方法包括统计分析、数学规划、决策分析,以及盈亏点分析和价值分析等。
(6)人事管理:主要涉及以下6个方面。
①人员的获得和需求估计。
②人才的开发,即进行教育和培训。
③人员的分配,主要是各种指派问题。
④各类人员的合理利用问题。
⑤人才的评价,主要是测定一个人对组织及社会的贡献。
⑥人员的薪资和津贴的确定。
(7)设备维修、更新、可靠度及项目选择和评价:如电力系统的可靠度分析、核能电厂的可靠度及风险评估等。
(8)工程的化设计:在土木、水利、信息、电子、电机、光学、机械、环境和化工等领域皆有作业研究的应用。
(9)计算机信息系统:可将作业研究的化算法应用于计算机的主存储器配置,如等候理论在不同排队规则下对磁盘、磁鼓和光盘工作性能的影响。利用整数规划寻找满足一组需求档案的寻找次序,并通过图论、数学规划等方法研究计算机信息系统的自动设计。
(10)城市管理:包括各种紧急服务救难系统的设计和运用,如消防车、救护车、警车等分布点的设立。美国采用等候理论方法来确定纽约市紧急电话站的值班人数,加拿大采用该方法研究城市警车的配置和负责范围,以及事故发生后警车应走的路线等。此外,还涉及城市垃圾的清扫、搬运和处理,以及城市供水和污水处理系统的规划等相关问题。
1.2 化算法的内容
化算法的内容包括:规划论(线性规划、非线性规划、整数规划和动态规划)、库存论、图论、排队论、可靠性理论、对策论、决策论、搜索论等,下面将具体介绍这些内容。
1.2.1 规划论
规划论(数学规划)是运筹学的一个重要分支,早在1939年苏联的康托罗维奇(Leonid V.Kantorovich)和美国的希奇柯克(F.L.Hitchcock)等人就在生产组织管理和编制交通运输方案时研究和应用了线性规划方法。
1947年美国的旦茨格(G.B. Dantzig)等人提出了求解线性规划问题的单纯形法,为线性规划的理论与计算奠定了基础,特别是计算机的出现和日益完善,更使规划论得到迅速的发展,它采用计算机处理成千上万个约束条件和变量的大规模线性规划问题,从解决技术问题的化,到工业、农业、商业、交通运输业和决策分析部门都可以发挥作用。
从应用范围来看,小到一个班组的计划安排,大至整个部门乃至国民经济计划的化方案分析都有用武之地,因此,它具有适应性强、应用面广、计算技术比较简便的特点。非线性规划的基础性工作是在1951年由库恩(H.W.Kuhn)和塔克(A.W.Tucker)等人完成的,到了20世纪70年代,数学规划无论是在理论和方法上,还是在应用的深度和广度上都得到了进一步的发展。
数学规划的研究对象是计划管理工作中有关安排和估值的问题,即在给定条件下,按某个衡量指标来寻找安排的方案。它可以表示为求函数在满足约束条件下的极大值或极小值问题。
现代的数学规划和古典的求极值的问题有本质的不同。古典的求极值方法只能处理具有简单表达式和简单约束条件的情况,而现代的数学规划中的问题目标函数和约束条件都很复杂,而且要求给出某种精确度的数字解答,因此算法的研究受到了特别的重视。
数学规划中简单的一类问题就是线性规划。如果约束条件和目标函数都属于线性关系就叫线性规划。要解决线性规划问题,从理论上讲要解线性方程组,因此解线性方程组的方法,以及关于行列式、矩阵的知识,在线性规划中非常重要。
线性规划及其解法(单纯形法)的出现,对化算法的发展起了很大的推动作用。许多实际问题都可以转化成线性规划来解决,而单纯形法又是一个行之有效的算法,加上计算机的出现,能够使一些大型复杂的实际问题得以解决。
非线性规划是线性规划的进一步发展和延伸。许多实际问题如设计问题、经济平衡问题都属于非线性规划的范畴。非线性规划扩大了数学规划的应用范围,同时也给数学工作者提出了许多基本的理论问题,使数学中的如凸分析、数值分析等也得到了发展。还有一种规划问题和时间有关,即“动态规划”,它已经成为在工程控制、技术物理和通信中控制问题的重要工具。
1.2.2 库存论
库存论(存贮论)是运筹学中发展较早的分支。早在1915年,哈里斯(F.Harris)就针对银行货币的储备问题进行了详细的研究,建立了一个确定性的存贮费用模型,并求得了批量公式。1934年威尔逊(R.H.Wilson)重新得出经济订购批量公式(EOQ公式)。
库存论真正作为一门理论发展起来是在20世纪50年代。1958年威汀(T.M.Whitin)发表了《存贮管理的理论》,随后阿罗(K.J.Arrow)等发表了《存贮和生产的数学理论研究》,莫兰(P.A.Moran)在1959年编写了《存贮理论》。此后,库存论成了运筹学中的一个独立的分支,有关学者相继对随机或非平稳需求的存贮模型进行了广泛深入的研究。
现代化的生产和经营活动都离不开存贮,为了使生产和经营活动能有条不紊地进行,工商企业都需要进行一定数量的物资贮备。例如,工厂为了进行连续生产,就需要贮备一定数量的原材料或半成品;商店为了满足顾客的需求,就必须有足够的商品库存;农业部门为了确保正常生产,就需要贮备一定数量的种子、化肥、农药;军事部门为了战备的需要,就要存贮各种武器弹药等军用物品;银行为了进行正常的业务,就需要有一定的资金贮备;在如今的信息社会,人们又建立了各种数据库和信息库,用以存贮大量的信息。
因此,存贮问题是人类社会活动,特别是生产活动中一个普遍存在的问题。物资的存贮,除了用来支持日常生产经营活动,库存调节还可以满足高于平均水平的需求,同时也可以防止低于平均水平的供给。此外,大批量物资的订货或利用物资季节性价格的波动,也可以得到价格上的优惠。
但是,存贮物资需要占用大量的资金、人力和物力,有时甚至造成资源的严重浪费。大量的库存物资所占用的资金,无论从相对数值还是数值上来看都是十分惊人的。此外,大量的库存物资还会引起货物的劣化变质而造成巨大损失,如药品、水果、蔬菜等,长期存放就会引起变质。特别是在市场经济条件下,过多地存贮物资还要承受市场价格波动的风险。
那么,一个企业究竟应存放多少物资为适宜呢?对于这个问题,很难笼统地给出准确回答,必须根据企业自身的实际情况和外部的经营环境来决定,若能通过科学的存贮管理,建立一套控制库存的有效方法,从而降低物资的库存水平,减少资金的占用量,提高资源的利用率,这对企业来讲,所带来的经济效益无疑是十分可观的。这正是现代存贮论所要研究的问题。
物资的存贮按其目的的不同可分为以下3种。
(1)生产存贮。它是企业为了维持正常生产而储备的原材料或半成品。
(2)产品存贮。它是企业为了满足其他部门的需要而存贮的半成品或成品。
(3)供销存贮。它是指存贮在供销部门的各种物资,可直接满足顾客的需要。
但不论哪种类型的存贮系统,一般都可以使用如图1.1所示的形式来表示。
图1.1 库存模型
库存论可以用“供、存、销”3个字来描述,即一个存贮系统,通过订货和进货后的存贮与销售来满足顾客的需求。或者说,由于生产或销售的需求,从存贮系统中取出一定数量的库存货物,这就是存贮系统的输出;存贮的货物由于不断地输出而减少,必须及时地补充,补充就是存贮系统的输入,补充可以通过外部订货、采购等活动来进行,也可以通过内部的生产活动来进行。在这个系统中,决策者可以通过控制订货时间的间隔和订货量的多少来调节系统的运行,使得在某种准则下系统运行能够达到。
因此,库存论中研究的主要问题可以概括为何时订货(补充存贮)和每次订多少货(补充多少库存)这两个问题。
1.2.3 图论
自然界和人类社会中的很多事物,以及事物之间的联系,都可以用点和线联系起来的图形来描述,如用点表示城市,用点与点之间的连线表示城市之间的道路,这样就可以描述城市之间的交通。如果在连线旁标明城市间的距离(在网络图中称为权),则形成加权图,就可以进一步研究从一个城市到另一个城市的短路径;或者在连线旁边标上运输单价,就可以分析运费少的运输方案。用图来描述事物间的联系,不仅直观清晰,而且网络的画法简单,不必拘泥于比例与曲直。图论既是拓扑学的一个分支,也是运筹学的重要分支,它是建立和处理离散数学模型的有用工具。
早在1736年,瑞士数学家欧拉(E.Euler)在求解著名的哥尼斯堡七桥难题时,就使用了图来进行分析论证。19世纪以来,英国数学家哈密顿提出了哈密顿(William Rowan Hamilton)回路和旅行商问题;电路定律创始人德国物理学家基尔霍夫(Gustav Robert Kirchhoff)和英国数学家凯莱(Arthur Cayley)提出了树的概念,分别用于求解和研究电力线网与化学分析结构,进一步发展了图论。1736年欧拉发表了关于图论的篇论文《依据几何位置的解题方法》,同年匈牙利数学家柯尼格(D. Konig)出版了图论的本专著《有限图与无限图的理论》。
近年来,随着计算机科学技术和化算法的发展,网络图论得到了更进一步的发展,其应用日益广泛。网络图论的分析方法被广泛应用于电力线网和煤气管道网的分析、印刷电路与集成电路的布线和测试、通信网络分析、交通运输网络的分析、经济和管理领域中流行的网络分析等。
1.2.4 排队论
排队论(随机服务系统理论)是在20世纪初由丹麦工程师爱尔朗(A. K. Erlang)对电话交换机的效率研究开始的,在第二次世界大战中为了对飞机场跑道的容纳量进行估算,该理论得到了进一步的发展,其相应的学科更新论、可靠性理论等也都发展了起来。
丹麦的电话工程师爱尔朗于1930年以后,开始了关于排队问题的研究,取得了一些重要成果。1949年前后,他开始了对机器管理、陆空交通等方面的研究,1951年以后,他的理论工作有了新的进展,逐渐奠定了现代随机服务系统的理论基础。排队论主要研究各种系统的排队长度、排队的等待时间及所提供的服务等各种参数,以便求得更好的服务,它是研究系统随机聚散现象的理论。
排队论的研究目的是要回答如何改进服务机构或组织所服务的对象,使某种指标达到的问题。如一个港口应该有多少个码头、一个工厂应该有多少名维修人员等。
因为排队现象是一个随机现象,因此在研究排队现象时,主要采用将研究随机现象的概率论作为主要工具。此外,还涉及微分和微分方程的相关内容。排队论把它所要研究的对象形象地描述为顾客来到服务台前要求接待。如果服务台已被其他顾客占用,那么就要排队。或者服务台时而空闲、时而忙碌,那就需要通过数学方法求得顾客的等待时间、排队长度等的概率分布。
排队论在日常生活中的应用非常广泛,如水库水量的调节、生产流水线的安排、铁路运输的调度、电网的设计等。
评论
还没有评论。