优化技术与软件ILOGOPL开发环境ILOGODMS光盘已放至FTP地址账户和密码都是download端口21课程介绍课程目标学习使用ILOGOPL开发环境解决实际问题掌握OPL的特征和功能了解在解决复杂商业优化问题时OPL开发环境的规则OPL与其他工具的关系课程介绍听众需要建模解决商业优化问题的专家预备知识对微软Windows操作系统的了解数学规划的知识将有助于对本课程知识的掌握,但并不是必须的。基本的编程知识对于ILOGOPL的开发是非常有用的,但并不是必须的。课程内容介绍ILOGOPL的优化技术使用线性规划的优化产品生产计划和OPL数据结构介绍ILOGOPL的优化技术概述优化技术、OPL和一个典型的生产计划问题什么是优化?优化是一种基于数学的技术,它以最大的运作效益为目标来分配各种资源。它是如何工作的?优化是一个可应用于特定问题的一个过程。这样,逻辑上第一步是对要解决问题的一个清晰的描述。随后的步骤如下:为你的问题构造一个模型将数据加入模型中利用数学优化引擎分析该模型,以找到最好的可能解当优化模型嵌入到实际应用中时,计划人员和运作管理者可以进行what-if分析,并可以比较各种方案。什么可以进行优化?优化是一种决策工具,它实际上可以应用于各种行业中,下图所示优化技术的应用领域。什么可以进行优化?从长期规划到实时决策,大量的决策问题可以进行优化。例如:多少产品需要进行生产,何时生产,如何生产如何运输产品、人员、材料如何混合配置原材料如何调度安排人员、工作和设备如何对设施和设备进行选址和分配如何花费资金,等等优化过程优化过程需要处理的一些信息类型,及其产生的结果。优化技术在优化技术广泛应用的领域,需要复杂的数学或先进的计算机科学方法来对复杂计划、调度和定价问题进行优化求解。在优化中用到的规划技术主要有:线性规划(LP)二次规划(QP)约束规划(CP)实际中,许多整数规划都含有浮点计算,因此混合整数规划(MIP)的应用要多于纯IP。应用,技术,计划类型,开发时间OPL可以描述的规划问题类型当目标函数是……变量可以是……约束是……线性的浮点整数线性不等式(=,=,==)二次的浮点整数线性或二次不等式(=.=.==)OPL和优化OPL开发环境是ILOG全部优化解决方案组件中的一个。ILOG优化工具可以分成两类:ILOGPowerOps全面、预先建立的应用,它们利用了超过15年的经验,这些经验为在制造业和运输业中的一些特殊领域中的工作提供了优化技术。ODMS优化决策管理系统,开发定制模型的一个成熟系统,是基于ILOG的、经过工业验证的、优化引擎的应用。ILOG的优化产品ODMS中的OPLILOGOPL开发环境是优化决策管理系统(ODMS)中的一个组成成分。ODMS是一套工具组件,包括ILOG优化引擎,它可以用来开发定制模型和应用。可以利用OPL开发环境来设计定制模型,用来解决商业或机构中的特定问题,这个过程并不需要低级开发语言。ODMS中的OPL可以利用OPL集成开发环境(IDE)来进行这一过程,它为用户提供了一个图形用户界面,从而为模型的开发提供了直观的工具。这些模型可以直接和ILOG优化决策管理器(ODM)一起集成到开发的应用中,从而使商业用户可以进行what-if分析,并且比较各种方案。数据与模型是相互独立的,这样所开发的原型就具有了可重用性。ODMS中的各种软件是为从事商业优化的不同人员的工作而设计的。角色和目标OPL是为优化专家们设计的工具利用这个工具,他们可以与其他领域的专家进行交互工作。开发各种应用的软件工程师利用ODM或ILOGConcert技术的程序库决策制定者为构建模型提供了基本信息,并且作为开发的应用的最终用户。什么是OPL开发环境?ILOGOPL开发环境是一个IDE(集成开发环境),利用OPL(优化编程语言)建立并运行由目标函数和约束组成的数学模型,读取相应的数据对其进行优化。OPL开发环境的组成包括:优化编程语言(OPL)用代数符号建立优化模型,类似于写在纸上的模型OPLIDE运行、测试和调试优化模型应用编程接口(APIs)可将模型嵌入到应用程序中什么是OPL开发环境?优化编程语言(OPL)、OPLIDE、应用编程接口(APIs)是建立在ILOGConcert技术基础之上,与ILOGCPLEX优化引擎相连接,并提供了对CPLEX算法各种设置的完全读取。什么是OPL开发环境?OPL开发环境IDE包括:建立OPL模型的图形编辑器用表格显示数据和解用于优化调试的菜单和按钮OPL语法的在线帮助OPL语言的特征为建立数学规划模型而提供的简洁语言为了描述数据而提供的先进数据类型提供了与关系型数据库和Excel电子表格的连接对于数据处理和交互式的解决过程提供了ILOGScriptOPLAPIs的作用利用以下的计算机开发语言,APIs允许将OPL模型和脚本嵌入到应用程序中。C++Microsoft.NETVisualBasic.NET,C#,J#,etc.MicrosoftOffice2003viaVisualStudioToolsforOfficeJavaWebASP.NET,JSP模型,数据和项目OPLIDE允许构建与数据独立的模型。这就意味着当数据发生改变时,不需要改变模型。模型在一个独立的文件中(模型文件)进行维护,它与数据(数据文件)相独立,因此,对于具有不同输入数据的同一问题的多个实体,模型是可重用的。模型文件和一个或多个数据文件(也可以不包括数据文件)组成了一个项目。模型,数据和项目除了模型和数据,项目还包括控制信息,用于实例化一个或多个问题。项目控制信息包含在2类结构中一个或多个设置文件(.ops文件)控制冲突解决、选择和线性规划算法的运行一个或多个运行配置它们是模型、数据和设置文件的集合thataremeanttoruntogether模型,数据和项目Model是一个问题的抽象,它与数据无关OPL可以建立与数据无关的模型的数学描述一个项目包括一个模型和一个或多个数据文件(也可以不包括数据文件),这些数据文件说明了特殊的问题实例。一个问题实例是一个使用专门数据集的项目的详细实例化,并受控于设置文件和运行配置。有关OPL项目的更多内容项目文件(.prj)包含了相应的各种文件和与一个问题相关的参数。它组织相关的模型和数据文件,并提供一种方便的方法来维护相关文件和运行选择之间的关系。在项目中:模型文件(.mod)声明了数据项目但是并不需要初始化它们数据文件(.dat)包含了在模型中声明的数据的初始化有关OPL项目的更多内容设置文件(.ops)当决定改变一个或多个数学规划和其他选择的缺省值时,该文件保存用户定义的值。运行配置并不是一个文件类型,而是为了运行目的设置的项目变化。一个运行配置组合了一个模型文件和一个或多个数据文件,考虑到内容和/或设置,它们与项目中原始的模型和数据是不同的,但是是针对同一个数学问题。在一个项目中,可以根据自己的需要定义多个运行配置。有关OPL项目的更多内容一个最小的项目有一个模型文件对于同一模型文件的一个缺省的运行配置一个典型的项目有一个或多个模型文件任意数量的数据文件(或者没有数据文件)一个或多个设置文件一个或多个运行配置,以设定这些模型、数据和设置文件的不同组合。通过一个典型的生产计划案例学习OPL开发环境的功能和特征在OPLIDE中为生产计划问题建模关键词:决策变量目标函数约束在OPLIDE中为生产计划问题建模目标函数描述了优化希望的最终结果。例如,为了获得最大利润而寻找最优的生产数量。为此,需要考虑生产中的各种约束条件。例如,每个产品所需生产的零件数,和每个零件的当前库存量。IDE会自动用不同颜色加亮关键字。在OPLIDE中为生产计划问题建模假设生产的是一种化工产品,下面的表格列出了模型中所需的数据以及它们在OPLIDE中是如何声明的:数据描述OPL中的声明产品是:Ammoniumgas(NH3)Ammoniumchloride(NH4Cl)Products={“gas”,”chloride”};数据描述OPL中的声明产品是:Ammoniumgas(NH3)Ammoniumchloride(NH4Cl)Products={“gas”,”chloride”};成分是:N,H,ClComponments={“nitrogen”,”hydrogen”,”chlorine”};各种成分的需求是:1个单位的N和3个单位的H组成1个单位的NH31个单位的N,4个单位的H和1个单位的Cl组成1个单位的NH4ClDemand=[[1,3,0],[1,4,1]];现有库存:50个单位的N,180个单位的H,40个单位的ClStock=[50,180,40];每种产品的利润:NH3=30,NH4Cl=40Profit=[30,40];练习:学习使用OPL对汽油生产问题进行建模,然后,可以将模型应用到不同的生产环境中。通过这个建模过程熟悉IDE及其特征。在开始之前,双击在桌面或是在Windows开始菜单中OPLIDE的图标,运行OPLIDE。OPLIDE具有多文档界面(MDI),这样可以同时编辑多个文件。下面的图表显示了IDE主窗口(一个项目已经加载进IDE中)和它的一些其它组成部分。步骤:1、打开OPLIDE案例项目TrainingDir\OPLXx.Labs\Gas\work\gas.prj项目包含两个文件:gas.mod(模型文件)和gas.da(数据文件)。2、和同学一起讨论这些文件3、点击工具条中的运行命令,并检查结果。调试OPLIDE提供了错误捕捉机制,这些错误包括语法错误或运行错误。为了快速演示如何使用这些功能,执行下面的步骤。1、在gas.mod文件中的一行语句的末尾删除一个分号,产生一个语法错误;2、运行该项目并注意输出窗口,然后在代码编辑窗口中出错行会被加亮。还可以在程序中加入断点,并查看它的状态。在线文档给出了详细的说明。3、纠正这个语法错误,然后保存这个模型文件。改变产品,重复使用模型现在,假设不是生产化工产品,而是生产珠宝,相应数据如下。使用相同的模型,写一个新的数据文件。数据描述OPL中的声明产品是:戒指,耳环Products={“rings”,”earrings”};数据描述OPL中的声明产品是:戒指,耳环Products={“rings”,”earrings”};成分是:黄金,钻石Componments={“Gold”,”Diamonds”};各种成分的需求是:3个单位的黄金和1颗钻石生产1个戒指2个单位的黄金和2颗钻石生产1个耳环Demand=[[3,1],[2,2]];现有库存:150个单位的黄金,180颗钻石Stock=[150,180];每种产品的利润:戒指=60,耳环=40Profit=[60,40];过程:1、在OPLIDE中,从菜单条中选择FileNewProject,创建一个新的项目。2、使用导航按钮进入目录文本框中,用MakeNewFolder按钮在TrainingDir\OPLXx.Labs\Gas\work\jewelry目录中创建一个新的jewelry目录。通过点击Createproject按钮完成这些操作。这个项目将打开一个空白的模型文件。3、在Project窗口中,在jewelry.mod上点击鼠标右键,并从上下文菜单中选择Removeitem。不用完全重新创建一个模型文件,可以利用现有的一个模型。过程:4、在项目文件上点击鼠标右键,并从上下文菜单中选择Addexistingdocument,选择TrainingDir\OPLXx.Labs\Gas\work\gas.mod并将它添加到你的项目中。5、在Project窗口,将gas.mod文件拖入Confi