2.1 一般研究过程
在长期的研究实践中,运筹学已经形成了一套完整的工作流程,可分为问题定义、数据收集、模型构建、模型求解、模型检验和结论实施6个步骤,每个步骤都有明确的任务。值得注意的是,在实际研究中这个过程往往需要反复进行,并随时可以跳转到任何一个步骤上。
下面结合例子进行说明。
2.1.1 问题定义
常见的教材给出的实际问题往往是示例性的,都很明确,很容易把它描述出来。现实研究,即使是相对简单的问题,最初也可能是模糊的、不精确的。研究者需要做的第一件事是,尝试将问题明确下来,即所谓的问题定义。具体工作包括确定研究目标、明确问题边界、列出问题约束、凝练问题要素及其关系等,研究周期很长的复杂问题还要明确研究时间限制、制订研究计划等。这一步至关重要,对研究结论的实用性有着重大影响,从“错误”的问题中,很难得出“正确”的答案。
实际上,问题定义这一步要完成从“现实世界”到“问题世界”的转化。现实问题往往是因素众多、关系繁杂的综合体,如果要研究它,不能“眉毛胡子一把抓”,必须梳理清楚关注的方面、关注的目标和相关的要素,也就是所谓的“定义问题”。必要时,还需要进行必要的假设,以便更为清晰地界定问题本身。
确定研究目标可能是这一过程中最重要的事情。必要时,需要与相关人员交流,特别是研究要服务的决策者,弄清楚他们对于研究的期望,明确研究要实现的目标或者多个目标的优先顺序。当然,研究者同时也要努力争取相关人员的支持,以便在后续研究过程中获取数据、验证结论等。
特别需要注意的是,运筹学寻求的往往是整体性的最优解决方案,而不是只对问题中部分因素有效的局部方案。所以,在理想情况下,研究目标应该为研究对象的整体性目标,但有时因为各方面因素的限制,做不到这一点,或者整体性目标过于宽泛很难转化为可定量描述的目标函数,那么需要考虑研究目标和整体目标的一致性,至少不能够有冲突,在保障一致性前提下,尽量做到目标明确。
对于以经济效益最大化为主要目的的组织(如大部分企业和相当部分个人),在进行运筹优化时目标函数一般取收益最大化或成本最小化,即以经济效益为核心指标。大部分时候,这样的目标都是明确的,但是否和组织机构的整体性目标一致,有时需要认真考虑。现实中可能因为追求短期利益或者局部利益,而使企业整体利益受损,甚至破产倒闭的例子比比皆是。一个避免“局部陷阱”的可行办法是,使用长期收益最大化作为目标,这时那些短期收益看来不那么好但具有战略价值的决策就会被凸显出来,从而对组织机构的长远发展更为有利。但这个方法有一个操作上的问题,即如何定义长期收益。一般而言,时间越长,不确定性也就越大,收益的量化也就越困难。现实中,很多研究采取的是将长期收益转化为短期收益的办法,采用满意短期利润目标和其他目标结合来代替长期收益,其他目标包括收益稳定性、市场份额增速、产品知名度等方面。
显然,目标选择的不同会导致截然不同的研究结果,在确定研究目标的过程中,需要用批判性思维不断反思什么是决策者最为关心的目标。
【案例2.1】 目标到底是什么?——商船上的高射炮
在第二次世界大战初期,英国商船在地中海上由于德军飞机的袭击损失惨重。有人提出,可以在商船上装备高射炮呢。一些商船试着采取这样的措施,但这样的做法在战时其实有点奢侈,因为船上光是安装高射炮还不行,还需要配备相关的作战人员,无论是高射炮本身还是人员,都是宝贵的作战资源,很多地方都需要;同时,一段时间的试用表明,单靠高射炮和训练水平一般的配备人员(分配给商船的只能如此),很难把来袭的敌机打下来,统计表明,一年左右只打下来了大约4%的来袭敌机,效率很低。这似乎表明,花费很多钱,投入了珍贵的作战资源,并没有得到与之匹配的效益!
这里核心的问题是,目标到底是什么?如果把商船装高射炮问题看成标准的作战行动,那么将研究目标定为“击落敌机的比例”就是合适的。但问题是,商船上安装高射炮是为了击落敌机吗?显然不是,装高射炮的初衷是保护商船和减少损失,那么合适的目标应该是使用高射炮对商船损失情况的影响。通过收集数据,表明在敌机威胁最大的低空轰炸中,商船装上高射炮后,被敌机击中的概率由13%下降到8%,被击沉的比例更是由原来的25%下降到10%,这一数据显示在商船上安装高射炮是相当划算的!
2.1.2 数据收集
在初步明确研究目标后,就需要花时间来收集问题的相关数据,数据既可以加深研究者对于问题的理解,也可以为下一阶段构建模型提供所需的输入。但数据收集可能比研究者预计的要困难,一方面,很多数据并没有被很好地保存,或者保存了,但已经是失效的陈旧数据,这时研究者需要重新追踪那些重要的数据,必要时需要其他人员的辅助;另一方面,虽然有相关数据,但保存的形式有问题,并不是研究者期望的形式,研究者需要进行转化或者重新按照所需形式来收集数据。即便这样的工作都做了,得到的很多数据也可能都是粗糙的、不准确的,研究者需要花费时间来提高数据的准确性和可用度。
实际上,数据收集的工作有可能贯穿于运筹学研究的全过程,因为模型的构建、求解和结论分析有可能需要不断返回,因为研究过程对问题加深了认识,极可能需要重新定义问题,从而需要进一步补充数据,或者对现有数据进行深加工。
对于当前信息时代的运筹学研究者而言,相比于信息匮乏,更烦恼的是数据太多了!随着近些年信息技术的进步,在生活生产实践中,出现了越来越多的传感器,收集的数据量也越来越大,各类数据库被广泛使用,数据量也爆炸式增长。在研究有些问题时,运筹学研究者可能会发现有太多的可用数据,但从海量的数据中如何找到关心的数据及数据之间的关联,是个重要的问题。在这方面,数据挖掘(Data Mining)、大数据分析等技术应运而生,这些技术在实际中也产生了巨大的应用价值,现在,相当部分运筹学者的研究都需要使用相关技术。
当然,数据的收集整理从来都是需要付出代价的,甚至要付出很高的代价,那么哪些数据是必须的,哪些数据是可选的,就至关重要。数据价值的判定最直接的依据是研究目标,案例2.1就给出了一个很好的说明。很多时候,问题定义和数据收集工作需要整体进行,既要从问题的界定中不断明确需要收集数据的类型,也要从数据收集整理过程中,进一步确认问题本身,特别是研究的目标。
【案例2.2】 数据能够用来干什么?——阿里巴巴的大数据分析
中国最大的电子商务公司阿里巴巴(淘宝网是其产品之一)已经在使用大数据技术来提高卖家的服务效率和买家的用户体验。每天数以万计的交易在淘宝网上进行,与此同时,商品价格、商品特征、交易时间、购买数量,以及买方和卖方的年龄、性别、地址、兴趣爱好等信息都会被记录下来(而作为实体存在的各类百货商场和超市很难做到这一点)。通过对这些数据进行处理、关联、分析和优化,淘宝网和其他商家可以了解作为一个生态系统存在的淘宝网宏观情况、各类品牌或商品的受欢迎程度、消费者的购物行为及其变化、影响消费各类因素的重要性,甚至是快递服务的效率等,据此商家可以对商品的销量进行预测,也可以更好地安排订货和库存策略,甚至优化退货保险的保额和快递服务公司的选择等;网站可以根据买家的信息和商家的服务智能化、个性化推荐商品,更高效地促进交易的达成,提升网站的用户体验;买家则能以更优惠的价格购买商品。
2.1.3 模型构建
在定义好问题并进行了初步的数据收集之后,就可以开始构建模型的工作了。
所谓模型是指研究对象的“抽象”,或者说是理想化的表示。在日常生活中,常见的例子包括航模飞机、玩具汽车或地球仪等;而在科学技术领域,几乎在所有的学科中,模型都起到了核心作用,例如,原子核的结构模型、DNA双螺旋结构模型、牛顿运动定律或者树状结构的组织结构图等。这些模型的形式无论是图形、数学方程式或表格,都“抽象”地刻画了建模人员所关心的部分,而忽略了其他方面。模型在抽象问题本质、表达相互关系和促进分析与理解等方面具有不可替代的作用。
好的模型都是保真性、灵活性和成本之间的巧妙平衡,其中保真性是指模型与所要求反映的现实之间的误差,灵活性是指当条件改变时模型还能够适用或者需要改变的困难程度,成本是指维护、操作与运用模型的代价。
运筹学中的模型常见形式为数学表达式,但很多模型也表达为图、表(矩阵)或者其他形式。无论哪种形式,运筹学使用的模型中需要说明三类要素:一是决策变量(Decision Variables),它表示需要研究的问题中哪些因素是变量,是待优化的对象;二是目标或目标函数(Objective Function),它是改变决策变量需要达成目的的体现,一般要求最大化(收益类目标)或最小化(成本类)表达,有些时候也可要求满意、可行、非劣等;三是约束或约束条件(Constraints),它表示进行优化时受到的限制,包括资源条件、时间因素等方面。在表达这三类要素时,往往还有一些常数项参与表达,称为模型的参数(Parameters)。当决策变量、目标函数和约束条件三者均可以用数学等式或不等式表达时,称为数学规划模型,它是运筹学模型中的主流和最常见的形式,特别地,如果这些表达式都是线性的,则称为线性规划模型,它是求解最为成熟、实践应用中最广泛的运筹学模型形式。
当确定模型形式后,另一项重要的工作就是给模型中的参数赋值,与教材中参数值一般都预先给定不同,现实问题中的参数值往往需要收集数据后才能确定,必要时可能还要猜测一些数据的值,用估计出的值来完成这一过程。由此,参数真实值具有一定的不确定性,这就需要在求解时分析模型的解如何随着参数值的变化而变化,这一工作通常称为灵敏度分析(Sensitivity Analysis),应该说几乎所有的运筹学模型都存在这一问题,同时这也是研究中的难点问题,本书第4章中将讨论线性规划模型的灵敏度分析问题。
为什么要使用数学模型呢?与用文字描述问题相比,数学模型具有很多优势:一是数学模型描述问题更为准确,能够全面反映问题中的多个要素及其之间的关系,促进以整体方式解决问题;二是,只有建立了明确的数学模型,计算机求解才变得可能,从而使得很复杂的、规模很大的问题也能得到求解。
但很多时候,构建出恰当的数学模型并不容易,建模时总是需要进行假设和近似简化。过于简化的模型反映不了问题本身的特征和要求,而过于复杂的模型则会在求解上遇到难于克服的困难,如何在模型复杂度和有效性之间取得理想的平衡呢?这取决于对问题理解的深度、对模型特征的把握,以及具体的建模技巧等多个方面,必要时,往往需要多次对初步建立的模型进行检验和调整。实际工作中,一个好的办法是先从一个简单的模型开始,然后逐步加入更复杂的因素来反映问题的更多方面。在此过程中,应始终确保模型本身是可求解的。
【案例2.3】 模型是否越复杂越好?——丘吉尔收回成命
1940年5月,德国装甲部队绕过马其诺防线,穿越阿登森林,开始对法国等几个国家发动攻势,英国首相丘吉尔应法国一方的请求,动用了十几个中队的飞机与法国空军并肩作战,对抗德国。在其后一段时间内的空战中,英国飞机损失惨重,战争形势越来越严峻。这时,法国强烈要求继续增派10个中队的飞机,丘吉尔决定同意这一请求。英国内阁感觉不妙,找来数学家进行研究,数学家根据飞机战损数据建立了一个预测模型(其形式为一个简单的图表,横轴是时间,纵轴是战损飞机的数量),根据这一模型计算出飞机的损失率,从而得到一个很有说服力的结论:如果补充率和损失率不变,那么只需要两周时间,英国派往法国的“飓风”战斗机会一架不剩!数学家由此要求内阁努力阻止丘吉尔的再派飞机到欧洲大陆的计划。当数学家的简明图表和有力结论摆在丘吉尔面前时,丘吉尔很快同意了这一请求,不但没有再派飞机到法国去,还把已经在法国的飞机大部分撤回英国。丘吉尔的这一决策保留了英国皇家空军的实力,为接下来的英伦保卫战奠定了基础条件。
在这一案例中,数学家使用的模型很简单,但很有效。在实践中,研究服务的决策者层次越高,阐明结论的时候需要使用的模型越简单。
2.1.4 模型求解
构建数学模型之后,紧接着要考虑的就是求解问题(实际上,在建模过程中,就需要考虑模型是否可求解的问题)。如果模型规模很小且形式就是经典模型,可以尝试使用本书介绍的特定算法进行手工求解。但大部分时候,这样的求解都会花费大量的时间和精力,更可行的办法是寻求计算机软件的帮助。这类软件是很多的,常用的软件包括:Microsoft Office系列的Excel,MathWorks公司的Matlab,LINDO System公司的LINDO/LINGO,ILog公司的CPLEX等。具体选择哪一款软件,根据问题的规模、使用便利性和可得与否来确定。当然,这些软件也有各种各样的限制,大部分只能求解较为成熟的模型,关于这些模型的类型和特征在本书后面会不断地进行讨论,这里就不细述。当然这些软件不一定能满足要求,必要时研究者完全可以自己编制软件来完成模型求解的工作。
无论哪类运筹学模型,其共同的主题都是“优化”,即寻找更好的解,甚至很多时候是寻找最好的解。对于传统的运筹学模型来说,对其求解一般都是找最优的解,目标函数要求最大化或者最小化,但现实中很多时候很难得到最优解(找不到或者需要付出的代价太大);同时,由于模型本身只是现实问题一定程度的“抽象”,最优解本身可能也并不重要。由此,一些运筹学家提出在研究中用“满意解”来取代“最优解”,甚至使用更弱的“可行解”。考虑到模型本身问题、决策的时间性要求以及求解的难度,很多时候,求解出满意解可能更有现实价值。在这个意义上,研究者在求解模型时,可能不再使用严谨但代价巨大的精确求解算法,而是使用一些能快速找到解的启发式(Heuristic)方法,后者是一些基于直观或者经验构造出的算法,一般不能确保找到最优解,只是在可接受的时间或空间代价下给出复杂优化问题的可行解。近年来,启发式方法被大量提出和运用,对运筹学的发展起到了很大的促进作用,但这也意味着,往往需要研究者自己编制启发式方法的程序来解决问题。
面向实际问题构建的模型,求解后得到的解可能是唯一的,也可能是一组解,即使是唯一解,也可能与现实问题的理想解相距甚远(很多因素无法量化,并没有在模型中反映出来),所以很多时候还需要进行所谓的优化后分析(指找到模型解之后的分析),这类工作也称为“what-if”分析,核心是回答决策者关心的一类重要问题:如果模型的假设前提发生了改变,那么模型的解会有什么样的变化?一方面可以使用上面所说的灵敏度分析,考察模型中作为参数的变量如果发生变化,模型的解发生变化的程度。现实中还可能包括另一方面的内容——反向分析,即决策者希望模型最优解在一定的区间上时,各类变量应该处于什么范围内;各类参数之间的协调变化关系是怎样的(有时为了降低其中一些参数,需要同步地增加另一些参数)。
【案例2.4】 给出最优解就结束了?——荷兰水资源管理的策略分析
欧洲国家荷兰十分重视水资源的规划利用,为了节约成本并减少污染,20世纪80年代荷兰负责用水控制的政府部门启动了一项大规模运筹学研究,用来支持国家水资源管理新政策的制定。该研究建成了50多个运筹学模型,并形成了一套融合模型计算和仿真模拟的集成系统。所用模型中的重要模型都区分了简单版本和复杂版本,简单版本支持快速计算,用来获取基本情况,并可以进行“what-if”分析;复杂版本则用于对若干关键的局部进行更加准确、详细的解算。这项研究并没有在得到“最优”的单一方案后结束,研究小组应用灵敏度分析技术,充分研究了环境标准、国际条约、气候条件等方面因素变化时,模型中解的变化情况,从而得到了大量富有弹性的可行方案,这些方案在进行充分的分析和比较后,均被提交给了决策部门。
事实表明,那些经过充分评估后的大量方案对于新政策的形成至关重要,为政策的有效执行节约了上千万美元,同时将每年的农业损失降低了约1500万美元[4]。
2.1.5 模型检验
即使对于专业的运筹学研究人员来说,构建复杂问题的大型数学模型也不可能一蹴而就,往往需要不断修正完善,直到最后达到满意的程度。这一过程和开发计算机程序类似,最初的代码写完之后,不可避免地会存在错误,必须经过不断检验、纠错和完善,以及若干轮的改进之后,当程序中主要的明显的错误被充分排除,并能给出合理有效的结果时(当然还可能存在一些隐藏较深的Bug),程序员才能对其基本满意,程序才可以被使用。类似地,复杂的数学模型的最初版本一般都会包含很多不足,求解过程中需要不断地检验模型,尽最大可能地找出模型的缺陷,改进模型的结构,直到模型能够给出合理有效的结果为止。模型检验在逻辑上分为两个部分,一是检查模型是否得到正确的求解;二是模型的解是否正确反映了问题实际。大部分时候,当模型的求解结果有问题时,这两类的检验都是必要的。
为了增加模型的有效性而进行的检验和改进通常称为模型验证(Model Validation)。如何进行模型验证呢?其过程因研究问题和采用模型的不同而不同,下面介绍一些一般性建议供读者参考。一是“团队式筛查”,指将涉及模型使用、模型构建与模型分析等各类人组成一个团队,在集中的场所将模型展示出来,由一人负责讲解,团队中的其他人负责质疑提问,大家一起分析讨论模型各类细节的正确性,并用头脑风暴的方法查找模型中的可能遗漏之处。二是“冷脑袋审查”,指邀请对研究对象和运筹学建模有一定认识,但并未参与研究的人员作为“冷脑袋”对模型进行审查。由于实际研究人员已经在研究中花费了大量时间,熟悉模型中的所有细节,很容易“只见树木、不见森林”,“冷脑袋”则可以全新视角看待整个模型以检验出明显的疏忽,提出“出乎意料、情理之中”的好建议。三是“复现检验”,指将历史数据导入构建的模型中,将模型得到的结果和历史上真实发生的结果进行对比,通过比较和分析吻合程度来找出模型潜在的缺点,验证模型的有效性。当然,在这个过程中,要十分小心两种情况:一是过去的数据本身是否可靠;二是模型所要反映的逻辑是否与数据代表的过去逻辑一致。如果两种情况的答案都是肯定的,那么“复现检验”往往是很有用的。当然,如果有其中之一是否定的,就需要研究者认真考虑检验结果是否可用,或者在多大程度上可用。
【案例2.5】 模型检验从何时开始?——IBM实施模型检验的实践
20世纪80年代后期,美国IBM公司为了提高效率、增强竞争力,实施了一项多层级库存管理系统的研究,这项研究最终催生了效率更高的跨国备件库存系统,为IBM公司每年节省了约2000万美元。这项研究中模型检验工作的核心是将库存系统的未来用户直接带入进来,组成一个用户小组作为该项研究的顾问,从模型(多层级库存模型)初步构建之处就开始试用,并鼓励它们用怀疑的态度尽可能在早期进行检验。最终,这一用户小组的反馈为系统建设带来了重大改进,实际效益超过了事前的预期[4]。
其实模型检验的工作是持续不断进行的(使用也是检验),但越是早期的检验越有价值,所以应该鼓励建模人员尽早将模型的初步雏形拿出来讨论甚至使用,这样不但可以加速研究过程,往往也能大大提高研究的效益。
2.1.6 结论实施
在确保模型本身可靠并求解后,就要考虑如何使用模型及相关结论了。这一阶段一般包括以下步骤。一是根据决策者的需要和决策的特点,形成模型求解与交互式决策服务的工具。这个工具可以在现有商业软件上集成形成,也可以根据需要自行开发。无论是哪一种,都需要研究者(或专门的工具开发人员)和工具的使用者密切配合,围绕决策者关心的问题及使用的方式来研制工具。二是为决策者提供工具使用和结论实施的相关解释,必要时,从使用者的角度编写说明文档和用户手册,并进行使用的相关培训。其中,一项工作至关重要:为决策者说明模型结论成立的前提条件,并对模型结果和实际运作之间的关系进行解释,为决策者正确使用研究结论提供必要条件。三是在使用过程中实施全周期管理,包括持续获得工具的运行状况,以及模型是否仍然适用、模型结论是否符合实际等方面的反馈信息,当发觉原有假设严重偏离时,应重新检验模型并更新工具。在此过程中,研究者可能还需要对相关数据和方法进行总结与记录,以备以后重复使用或者满足第三方检测的要求。
问题定义、数据收集、模型构建、模型求解、模型检验、结论实施这6个步骤有一定的先后关系,但并不是简单的线性关系。任何有经验的研究者都会发现,现实中的研究从来都存在多次的反复迭代,在2.1.1~2.1.6节中,任何一步都可能返回前面的某个步骤上去。读者需要将更多精力放在每个步骤的具体工作中,而不是步骤间的顺序上。