ImageVerifierCode 换一换
格式:DOCX , 页数:40 ,大小:557.30KB ,
资源ID:25817299      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25817299.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(xprog用户指南.docx)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

xprog用户指南.docx

1、xprog用户指南XProg 1.0 用户指南MATLAB工具箱-不确定条件下的优化1介绍XProg是一个用于在MATLAB环境下构造不确定性优化模型的工具箱。(2012A或以上版本)。它能够解决确定性的、随机的、鲁棒的和分布式的。鲁棒优化问题1, 2, 3。灵感来自决策规则技术 1, 2, 4,5 ,这工具箱还支持将多阶段问题中的可调整资源决策建模为可处理的决策规则近似。与MATLAB的矩阵计算语法一致,XProg非常易于实现,并且与其他MATLAB的数值函数和图形函数兼容。针对大规模优化问题,开发了基于高效矩阵处理函数的工具箱,能够利用不确定集的特殊结构来降低计算成本。IBM ILOG C

2、PLEX混合整数优化器在当前版本中用于求解以线性、二次或二阶锥形程序形式的模型。在整个用户指南中,我们将使用粗体字母来表示矩阵和向量。矩阵或向量的条目用带表示索引下标的常规字母表示。工具箱中的所有函数都被写为函数“functions”,而输入和输出参数则写作“arguments”。随后的章节组织如下。下一章介绍了该工具箱的配置、数据结构和基本功能。利用几个确定性和随机性编程实例演示了XProg的实现。第三章给出了求解鲁棒优化问题的一般步骤,包括建立随机变量和不确定性集合,以及为可调整决策建立决策规则函数。最后一章讨论了分布式鲁棒优化问题的建模与求解。2从XPorg开始2.1准备工作XProg在

3、32位和64位Matlab下工作,版本2012A或以上。它需要安装IBM ILOG CPLEX作为混合整数优化器。这个软件是一个流行的商业求解器,而且对学校使用人员是免费的。2.2配置XProg使用IBM ILOG CPLEX Optimization Studio 12.6.3/12.6.2/12.6.1作为求解器。如果这些解决程序已经安装在默认目录下,那么它们可以轻松地与我们的工具箱链接。用户只需要在命令窗口中运行交互式输入程序configure。如图2.1所示,您可以选择您正在使用的CPLEX优化器的版本。然后程序将询问所选的解决程序是否安装在默认目录中。一旦用户键入“Y”,程序就完成了

4、配置过程。如果使用其他版本的CPLEX优化器,或者如果这些求解器安装在其他目录中,那么一旦指定了求解器的版本和目录,程序配置将帮助用户编译求解器函数。如果使用其他版本的CPLEX优化器,或者指定了这些求解器。请注意,在这种情况下,您需要在计算机中安装兼容的C/C+编译器,并且编译器应该在MATLAB命令提示符下通过调用“MEX安装程序”来预先激活。详细过程如图2.2所示。配置XProg的第一步是将“dll”文件“cplexXXXX.dll”从“CPLEX根目录CPLEXXXXcpleXXXXcplebin”目录复制到XProg工具箱的function”文件夹中,其中“XXXX”表示CPLEX优

5、化器的版本号。请注意,在使用XPROG之前,只需要进行编译。除非使用不同版本的CPLEX优化器,否则不需要为将来的实现重复这些步骤。图2.1 配置xprog CPLEX 12.6.3安装在默认目录图2.2 配置XPROG为用户指定的求解器2.3 XProg基础2.3.1 XProg的模型,决策,约束在XProg工具箱中定义了以下对象和函数来构造和解决优化模型。1)start_xprog和end_xprog函数start_xprog用于把XProg工具箱包含到工作目录中,并且在运行基于XProg的任何代码之前都需要它。一旦工具箱被包含到工作目录中,用户可以在任何文件夹中执行XPROG程序。函数e

6、nd_xprog用于从当前工作目录中删除XPROG。如果函数或对象名称与其他工具箱存在矛盾,则使用此函数。在下表中列出了所有XPROG对象的名称。表2.1 XPorg工具箱的对象名称 定义absexp 线性仿射表达式的绝对值bound 决策变量或随机变量的界constraint 约束条件drcconstraint 具有期望条件的不确定约束的鲁棒对偶exp 线性仿射表达式的指数函数expconstraint 期望条件约束explinfun 一类不确定线性函数的期望expoconstraint 指数约束linfun 线性函数linoptim 确定性优化程序normconstraint 二阶锥约束n

7、ormexp 二阶锥表达式qexpconstraint 圆锥指数二次约束qexpfun 圆锥指数二次函数rcconstraint 不确定约束的鲁棒对应refrule 带索引的决策规则函数rule 决策规则函数sqconstraint 平方项的约束sqconstraints 平方项约束sqexp 平方表达式sqmat 矩阵形式的平方表达式subsets 置信集unconstraints 不确定性约束unconstraints 不确定线性函数variables 决策变量或随机变量xprog XPROG模型2)xprog函数xprog创建一个新的XPROG优化模型对象Model =xprog创建优化

8、模型对象模型model = xprog(name)创建一个优化对象model带有用户定义的标题name3)decision函数decision为模型对象定义新的决策变量x = model.decision为模型对象model定义一个连续决策变量xx = model.decision(N)为model定义N*1的向量x为连续决策变量x = model.decision(N, M)为model定义N*M的向量x为连续决策变量x = model.decision(N, M, type)为model定义N*M的向量x为连续决策变量。如果type=0,则这些变量是连续的;如果type=1,则这些变量是二

9、进制的;如果type=2,则这些变量是通用整数。x = model.decision(N, M, type, name)这组变量的名称是name4)add函数add用于添加一组约束到模型对象中model.add(constraint)添加constraint到优化模型对象model中。参数constraint可以是任何确定性二次可表示约束,或者线性约束,包括随机变量或期望项。model.add(constraint,name)指定name为约束名称5)min和max函数min和max用来定义对象函数。对象函数必须是1*1的形式。注意不允许对同一个模型定义对象函数超过一次。如果对象函数被修改,将

10、会给出错误信息。model.min(Fun)最小化对象函数Fun。model.max(Fun)最大化对象函数Fun。6)solve函数solve解答Xprog工具箱构建的优化问题。model.solve解决对象model的优化问题。相对混合整数规划(MIP)的间隔设置为10-4如果问题中包含整数变量。model.solve(MIPGAP)求解程序将终止当MIP间隔小于误差MIPGAP。注意MIP间隔误差是无效的当model中所有决策变量都是连续的。7)get函数get用来检索模型的目标值,或选择决策变量的最优解。model.get得到对象model的值。x.get得到决策变量矩阵x的解2.3.

11、2矩阵索引与算术运算XProg应用与MATLAB相同的索引系统访问矩阵中的决策变量。下面的示例演示如何为索引决策变量制定约束。model=xprog; % create a model;x=model.decision(5,6); % define a 5*6 decision variable matrixmodel.add(x=0); % each element of x is nonnegativemodel.add(x=zeros(5,6); % same as abovemodel.add(3*x(1,5)=10); % 3*x_15=10model.add(x(1,:)=x(5,

12、:); % the 1st row of x is no larger than the 5thmodel.add(x(:,end-1:end)=1); % the last two columns are no larger than 1model.add(x(1 3 5,2 4)=1); % x_12, x_32, x_52, x_14, x_34, x_54 =1model.add(x(8)=x(14); % x_32=0); % matrix multiplication A*xmodel.add(sum(x)-y*c=1); % transpose of y, sum of each

13、 row of xmodel.add(c.*y=0); % vertical concatenation. % x and y(:,2:3) have the same number of rowsmodel.add(x y=1); % horizontal concatenation. % x and y have the same number of columnsmodel.add(reshape(y,4,4)=eye(4); % reshape y into a 4*4 matrix. % the number of elements must not change2.3.3凸函数一些

14、常用的凸函数被并入XPROG工具箱中。注意,为了保持凸性,凸函数只允许小于或等于线性表达式。异常导致错误消息,指示约束是非凸的。1)abs函数abs返回线性仿射表达式的绝对值。abs(fun)返回线性仿射函数矩阵fun的绝对值。2)norm函数norm返回线性仿射表达式的F-范数。norm(fun)返回线性仿射表达fun的F-范数作为矩阵范数。假设fun是C=AX+B的矩阵范数,CRM*N,norm返回 3)square函数square返回线性仿射表达式fun的平方作为向量。假设fun是Ax+b形式的向量,则函数返回(Ax+b)T(Ax+b)4)element-wise square:.2运算

15、符“.2”返回矩阵元素的平方(fun).2返回线性仿射表达式fun的元素平方,输入参数fun通常是以C=AX+B的矩阵形式5)exp函数exp用二阶二次曲线近似线性仿射表达式的指数函数。exp(Fun)用二阶二次曲线近似线性仿射表达式fun的指数函数。近似的精度取决于参数model.Param.ExpL.。6)quadexpcone函数quadexpcone用二阶二次曲线近似文献6提出的二次指数锥函数。quadexpcone(a,b,c)近似 当输入参数a,b,c都是1*1变量或者线性仿射函数。使用这些凸函数构造约束的示例如下。model=xprog; % create a modelx=mo

16、del.decision(8,2); % define a 2*8 decision variable matrixy=model.decision(2,8); % define a 2*8 decision variable matrixA=ones(1,8); % A is a 3*8 matrixB=ones(3,2); % B is a 3*2 matrixmodel.add(abs(x)=norm(x); % norm of xmodel.add(-square(A*x)+4=0); % square of A*x, which is equivalent to (A*x)*(A*x

17、)model.add(x(1:3,:).2-B=0); % element-wise square of x(1:3,:)2.3.4 XPorg模型的数学公式XProg允许用户访问优化公式的重要数据,如问题维数、约束矩阵、决策变量的类型和边界等。这些数据可以通过函数problem以MATLAB结构数据格式返回。我们还开发了一个函数showsparse来揭示线性和二阶锥约束矩阵的稀疏性。这两个函数的细节如下所示。1)problem函数problem返回优化问题的数据。Problem=model.problem返回model问题的MATLAB结构数据。次结构的细节如下。Problem.A是所有约束

18、的左手边矩阵。Problem.b是所有约束的右手边矩阵。Problem.sense是表示每个约束意义的向量。“0”表示“”,“1”表示“=”。Problem.Fun是目标函数协方差向量。Problem.M是表示可变类型的向量。“0”表示连续,“1”表示二进制,“2”表示一般整数。Problem.LB是可变下界。Problem.UB是可变上界。Problem.Qmat是包含所有二阶锥约束数据的稀疏矩阵。2)showsparse函数showsparse显示稀疏矩阵的稀疏性或优化模型。Model.showsparse显示model约束矩阵的稀疏性。线性约束通过蓝圈表示,二阶锥约束用红圈表示。Show

19、sparse(A)显示矩阵A的稀疏性。2.3.5参数对于每个XPorg对象,都有一个名为“Param”的字段,用于分配优化模型的某些参数。下面列出这些参数。model.Param.DecRand为减少鲁棒优化问题的规模设置选项。如果DecRand设置为“1”,xprog产生更小的鲁棒counterpart公式通过利用不确定集的特殊结构。默认值是“0”,不应用减小规模。更多细节在第3章3.1.3中给出。model.Param.ExpName是导出“lp”文件的名称。默认值是空的。导出文件的名称和模型名称相同,如果这个字段没有被定义。model.Param.IsExport是输出选项。如果IsEx

20、port被设置为“1”,则生成和模型关联的“lp”文件,如果是“0”,就不输出文件。默认值是“0”。model.Param.IsPrint是输出选项。如果Isprint设置为“1”,则显示解决时间和状态,如果是“0”就不显示。默认值是“0”。model.Param.MIPGap设置包含整数变量的问题的相对MIP间隙。默认值为10-4。本字段也可也由函数solve的输入参数设置。model.Param.IntTol设置整型变量的完整性公差。默认值为10-5。这个参数在处理Big-M术语的约束时非常有用。model.Param.ExpL设置用于近似指数和二次指数锥约束的常数L。l必须是正整数,默认

21、值是4。2.4说明性实例2.4.1确定性优化实例通过两个实例说明了使用XProg解决优化问题的一般过程。首先给出一个简单的确定性线性规划问题,然后给出一个实际的风力分配问题,作为对二次函数和整数决策变量的示例。例2.4.1考虑一个简单的线性规划问题该线性规划可以方便地用下面的代码表示,它给出了最优值为36,最优解为x=4和y=6。model=xprog(Simple LP); % create a model, named Simple LPx=model.decision; % create a decision x for modely=model.decision; % create a

22、 decision y for modelmodel.max(3*x+4*y); % define objective functionmodel.add(2.5*x+y=20); % add the 1st constraint to modelmodel.add(3*x+3*y=30); % add the 2nd constraint to modelmodel.add(x+2*y=0); % bound of xmodel.add(y=0); % bound of ymodel.solve; % solve the problemObj=model.get; % get the obj

23、ective valueX =x.get; % get solution xY =y.get; % get solution y这个例子表明,制定优化问题的第一步是创建一个XProg对象。然后用户可以决定决策变量、目标函数和约束。这种优化模型可以通过调用函数“solve”来解决。目标函数值和最优解可以通过函数“get”来访问。例2.4.2第二个例子。第二个例子考虑40个风力涡轮机跨越7个地点的最优分配7,以便使总风力方差最小。假设所有地点的预期风能由向量 表示,风电功率的标准偏差用向量 表示,风电功率的相关性用相关矩阵 表示。向量和矩阵P的输入值可以在说明中找到。假定即所有站点的涡轮数矢量,预

24、期总风力输出为50MW,该风力分散问题可以表示为如下的二次规划问题。下面列出了基于XPROG的相应代码。% input data is omitted. Please refer to example_2_4_2_winddiv.m% mu(7*1) is the expected wind power from each site% sig(7*1) is wind power standard deviations of each site% P(7*7) is the correlation matrixmodel=xprog(Wind Div); % create a model, n

25、amed Wind Divmodel.Param.IsExport=1; % export model in lp formatmodel.Param.ExpName=WindDiv; % name of the export file is WindDivn=model.decision(7,1,2,#Turbine); % integer decisions as the no. of turbinesFun=square(P(1/2)*(diag(sig)*n); % define a quadratic expression by function squaremodel.min(Fu

26、n); % define objective functionMeanWind=50; % expected total wind outputmodel.add(mu*n=MeanWind); % add 1st constraint to modelmodel.add(sum(n)=40); % add 2nd constraint to modelmodel.add(n=0); % bound of nmodel.solve(1e-5) % solve the problem, MIP gap set to be 1e-5Obj=model.get; % get optimal obje

27、ctiveN =n.get; % get optimal solution of n目标值是1265.67MW2,最优风电机组配置是n=(12,20,1,0,0,2,5)。作为整数规划问题,我们可以利用第20行的函数solve将对偶间隙公差改为le-5。这个参数,连同完整性容差变量,也可以通过给model.Param字段赋值来改变。此外,通过将参数“IsExport”设置为“1”,将“lp”文件导出到当前目录,并具有用户指定的名称“WindDiv”。如果没有指定导出的“lp”文件名称,则文件名与模型名相同。通过调用函数model.showsparse,可以显示约束矩阵的稀性,如图2.3所示。注

28、意,XProg将所有问题推广到二阶锥规划中,因此在公式中引入一些中间变量,以便将二次约束转换为等效的二阶锥约束。2.4.2随机规划实例Xprog也能解决随机规划问题。例2.4.3展示了如何利用MATLAB的单元阵列为不同场景创建决策变量和制定约束条件。例2.4.3考虑参考文献8中讨论的家具制造问题。一家家具公司生产桌子、桌子和椅子,分别卖60美元、40美元和10美元。每种产品的制造需要木材和两种类型的熟练工人:精加工和木工。表2.2给出了每种资源的成本和制造每种家具所需的数量。表2.2产品需求低一般高书桌50150250桌子20110250椅子200225500可能性0.30.40.3在这个例子中,每个产品的需求都是不确定的。不确定的需求通过三种情况来表达:低的、一般的和高的。需求情景和相关概率的结果列于表2.3中。表2.3家具的成本资源资源成本(元)书桌桌子椅子木工5.221.50.5精加工4421.5木材2861

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1