Python最优化算法实战
第一章最优化算法概述
1.1最优化算法简介
最优化算法,即最优计算方法,也是运筹学。涵盖线性规划、非线性规划、整数规划、组合规划、图论、网络流、决策分析、排队论、可靠性数学理论、仓储库存论、物流论、博弈论、搜索论和模拟等分支。
当前最优化算法的应用领域如下。
(1)市场销售:多应用在广告预算和媒体的选择、竞争性定价、新产品开发、销售计划的编制等方面。如美国杜邦公司在20世纪50年代起就非常重视对广告、产品定价和新产品引入的算法研究。
(2)生产计划:从总体确定生产、储存和劳动力的配合等计划以适应变动的需求计划,主要采用线性规划和仿真方法等。此外,还可用于日程表的编排,以及合理下料、配料、物料管理等方面。
(3)库存管理:存货模型将库存理论与物料管理信息系统相结合,主要应用于多种物料库存量的管理,确定某些设备的能力或容量,如工厂库存量、仓库容量,新增发电装机容量、计算机的主存储器容量、合理的水库容量等。
(4)运输问题:涉及空运、水运、陆路运输,以及铁路运输、管道运输和厂内运输等,包括班次调度计划及人员服务时间安排等问题。
(5)财政和会计:涉及预算、贷款、成本分析、定价、投资、证券管理、现金管理等,采用的方法包括统计分析、数学规划、决策分析,以及盈亏点分析和价值分析等。
(6)人事管理:主要涉及以下6个方面。
①人员的获得和需求估计。
②人才的开发,即进行教育和培训。
③人员的分配,主要是各种指派问题。
④各类人员的合理利用问题。
⑤人才的评价,主要是测定个人对组织及社会的贡献。
⑥人员的薪资和津贴的确定。
(7)设备维修、更新可靠度及项目选择和评价:如电力系统的可靠度分析、核能电厂的可靠度B风险评
估等。
(8)工程的最佳化设计:在土木,水利、信息电子、电机、光学、机械、环境和化工等领域皆有作业研究的应用。
(9)计算机信息系统:可将作业研究的最优化算法应用于计算机的主存储器配置,如等候理论在不同排队规则下对磁盘、磁鼓和光盘工作性能的影响。利用整数规划寻满足组需求档案的寻次序,并通过图论、数学规划等方法研究计算机信息系统的自动设计。
(10)城市管理:包括各种紧急服务救难系统的设计和运用.如消防车、救护车、警车等分布点的设立。美国采用等候理论方法来确定纽约市紧急电话站的值班人数,加拿大采用该方法研究城市警车的配置和负责范围,以及事故发生后警车应走的路线等。此外,还涉及城市垃圾的
清扫、搬运和处理,以及城市供水和污水处理系统的规划等相关问题。
1.2最优化算法的内容
最优化算法的内容包括:规划论(线性规划、非线性规划、整数规划和动态规划)、库存论、图论、排队论、可靠性理论、对策论、决策论、搜索论等。
1.2.1规划论
1.2.2库存论
库存论中研究的主要问题可以概括为何时订货(补充存贮)和每次订多少货(补充多少库存)这两个问题。
1.2.3图论
1.2.4排队论
排队论(随机服务系统理论)主要研究各种系统的排队长度、排队的等待时间及所提供的服务等各种参数,以便求得更好的服务,它是研究系统随机聚散现象的理论。
排队论的研究目的是要回答如何改进服务机构或组织所服务的对象,使某种指标达到最优的问题。如一个港口应该有多少个码头、一个工厂应该有多少名维修人员等。
因为排队现象是一个随机现象,因此在研究排队现象时,主要采用将研究随机现象的概率论作为主要工具。此外,还涉及微分和微分方程的相关内容。排队论把它所要研究的对象形象地描述为顾客来到服务台前要求接待。如果服务台已被其他顾客占用,那么就要排队。或者服务台时而空闲、时而忙碌,那就需要通过数学方法求得顾客的等待时间、排队长度等的概率分布。
排队论在日常生活中的应用非常广泛,如水库水量的调节、生产流水线的安排、铁路运输的调度电网的设计等。
1.2.5 可靠性理论
可靠性理论是研究系统故障,以提高系统可靠性问题的理论。可靠性理论研究的系统一般分为以下两类。
(1)不可修复系统:这种系统的参数是寿命、可靠度等,如导弹等。
(2)可修复系统:这种系统的重要参数是有效度,其值为系统的正常工作时间与正常工作时间加上事故修理时间之比、如一般的机电设备等。
1.2.6对策论
对策论(博弈论)是指研究多个个体或团队之间在特定条件制约下的对局中,利用相关方的策略而实施对应策略的学科,如田忌赛马,智猪博弈就是典型的博弈论问题。
1.2.7决策论
决策论是研究决策问题的,所谓决策就是根据客观可能性,借助一定的理论、方法和工具,科学地选择最优方案的过程。决策问题由决策者和决策域构成,而决策域则由决策空间、状态空间和结果函数构成。研究决策理论与方法的科学就是决策科学。
决策所要解决的问题是多种多样的,不同角度有不同的分类方法。按决策者所面临的自然状态的确定与否可分为确定型决策、不确定型决策和风险型决策,按决策所依据的目标个数可分为单目标决策与多目标决策,按决策问题的性质可分为战略决策与策略决策,以及按不同准则划分成的种种决策问题类型。不同类型的决策问题应采用不同的决策方法。
决策的基本步骤如下:
(1)确定问题,提出决策的目标;
(2)发现、探索和拟定各种可行方案;
(3)从多种可行方案中,选出最佳方案;
(4)决策的执行与反馈,以寻求决策的动态最优。
如果对方决策者也是人(一个人或一人),双方都希望取胜,这类具有竞争性的决策称为对策或博
弈型决策。构成对策问题的3个根本要素是:局中人、策略和一局对策的得失。对策问题按局中人数分类可分成两人对策或多人对策,按局中人赢得函数的代数和是否为零可分成零和对策和非零和对策,按解的表达形式可分成纯策略对策和混合策略对策,按问题是否静态形式可分成动态对策和静态对策。
1.2.8搜索论
搜索论主要研究在资源和探测手段受到限制的情况下,如何设计寻某种目标的最优方案,并加以实施的理论和方法。
免费管理系统html模板第二章Python编程方法
2.1编程基础:Python语法
2.1.1类与实例
类在大部分编程语言中都是一个很重要的概念,类是面向对象编程的基础。使用函数可以实现简单功能的复用,而使用类则可以实现复杂的系统代码复用,因此通过类来模拟复杂的仿真系统。
举一个例子.如PPT模板可以是一个类,那么,通过修改PPT模板中的数据和文字得到新的PPT,就是
实例,这个修改的过程就是实例化。又如,动物是一个类,小猫就是一个实例。类由属性和方法两部分组成。如小猫是个类,其属性包括毛、体重,方法包括抓老鼠。又如学生是个类,某个具体的同学就是实例,学生这个类的属性包括学号、身高、体重等;而学生这个类的方法就是学生能干什么,包括学习、考试等。方法就是这个类能做哪些事情,代码实现就是函数,一个函数经过固定格式的包装后就是类的方法。
注意:类的定义和实例化有固定的格式要求。
# 定义一个类
class cat():
def __init__(self, color, weight):
self.weight = weight
def catch_mice(self):
"""抓老鼠的方法"""
print('抓老鼠')
def eat_mice(self):
"""吃老鼠"""
print('吃老鼠')
# 类的实例化
my_cat = cat('yello', 10)
# 调用类的方法
my_cat.catch_mice()
# 输出抓老鼠
my_cat.eat_mice()
# 输出吃老鼠
# 查看类的属性
print(lor)
# 输出yello
print(my_cat.weight)
# 输出10
所有的类都有一个_init_(self)初始化方法,用来定义类有哪些属性,也可以用来在实例化类时执行某些方法。
2.2Pandas基础
2.2.1Pandas基础数据结构
Pandas提供了Series和DataFrame两种基础数据结构,其中Series表示序列数据,DataFrame 表示表格数据,且是由多个Series组成的。
2.2.2分组统计
Pandas的分组统计使用groupby函数,参数as_index=False表示统计后返回DataFrame类型的结果,否则返回Series类型的统计结果。
2.2.3apply函数
对于apply函数,其作用是对目标集合中的每一个元素执行相同的操作。
第三章Gurobi优化器
3.1Gurobi的数据结构
3.1.1Multidict
Multidict,即复合字典,就是多重字典的意思,multidict函数允许在一个语句中初始化一个或多个字典。
3.1.2Tuplelist
Tuplelist,即元组列表,就是tuple和list的组合,也就是list元素的tuple类型,其设计目的是为了高效的在元组列表中构建子列表。
3.1.3Tupledict
Tupledict是Python的dict的一个子类,通过tupledict可以更加高效地操作Gurobi中的变量子集,也就是说当定义了很多变量,需要对其中一部分变量进行操作时,可以使用tupledict 的内置方法来高效轻松地构建线性表达式,如sum和prod。tupledict的键在内部存储格式是tuplelist,因此可以使用tuplelist的select方法选择集合的子集。在实际使用中,通过将元组与每个Gurobi变量关联起来,可以有效地创建包含匹配变量子集的表达式。