版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#LINGO与外部文件之间的数据传递一、通过Windows剪贴板传递数据有时侯实际问题的数据在Word或Excel文件中(通常出现在表格中),在编写LINGO程序时可以通过剪贴板把表格连同数据传递到LINGO中。下面用实例来说明具体操作方法。例:水资源分配问题。某水库可分配的水资源量为7个单位,分配给3个用户,各用户在分配一定单位水资源以后产生的效益如下表所示, 求最优分配方案。用户分配一定水资源量以后的效益水资源量1234567用户151540809095100用户25154060707375用户34264045505153解:用5表示图所示的效益矩阵,引入决策矩阵X表示水资源分配情况,其中1用户i分配j单位水资源Xij_j不分配则目标函数是分配方案的总效益最大,约束条件有两条:水资源总量7个单位;7每个用户得到的水资源数量只能是0到7共8个数字中的一个,即7Xij<1jd于是,本问题的数学模型为:3 7maxf=CijXiji妊j±「7送Xij兰1,i=1,2,3jm3 7丿送瓦jXij=7iz±jztXij=0或1,i=1,2,3,j=1,2,…,7要想通过Windows的剪贴板把数据传入LINGO程序的数据段,应当先在Word或Excel中用鼠标选中表格中的数据块,点击菜单中的复制,然后在LINGO
中点击Edit菜单中的Paste则数据连同表格一起出现在 LINGO程序中,如下所示:model:sets:user/1..3/;wa/1..7/:sl;fp(user,wa):c,x;endsetsdata:c=5154080909510051540607073754264045505153;!以上数据从Word中剪贴过来;sl=1234567;!水资源数量等级;enddatamax=@sum(fp:c*x); !目标函数;@for(fp:@bin(x)); !0-1变量;@sum(fp(i,j):x(i,j)*sl(j))=7; !水资源总量为7;@for(user(i): @sum(fp(i,j):x(i,j))<=1); !每个用户最多得到一种水资源数量等级;end程序运行结果:枠阳静E'p枠阳静E'p平#「:-舉迥生iteration:120.0000Globaloptimalsolucionfounditeration:120.0000Objectivevalue:VariableValueReducedCost5L(1)000000000000SL(2}2*000000□.□00000SLt纠3.0000000.OOOOOOSL(即4.000000□.OOOOOOSL(5)5・000000□・OOOOOOSL(6)GOOOOOO□・000000SL(7}7*000000□.OOOOOO二、LINGO与文本文件之间的数据传递1•从文本文件读取数据函数@file的功能是从文件读取信息,使用格式为:@file(fname);该语句通常放在数据段,其中参数fname是存放数据的文件名,文件名可以包含目录路径,如果不含目录路径,则默认在当前目录,该文件必须是纯文本文件,可以用Windows附件中的写字板或记事本创建,文件中可以包含不同的数据段,数据段之间用“ ~”分开,数据段内的多个数据之间用逗号或空格分开,数据结束时不要加“;”号,举例如下:model:!6发点 8收点运输问题;sets:warehouses/@file('1.txt')/:capacity;vendors/@file('1.txt')/:demand;links(warehouses,vendors):cost,volume;endsets! 目标函数;min=@sum(links:cost*volume);! 需求约束;@for(vendors(J):@sum(warehouses(I):volume(I,J))=demand(J));!产量约束;@for(warehouses(I):@sum(vendors(J):volume(I,J))<=capacity(I));!这里是数据;data:capacity=@file('1.txt');demand=@file('1.txt');cost=@file('1.txt');enddataend模型的所有数据来自于1.txt文件。其内容如下:!warehouses成员;WH1WH2WH3WH4WH5WH6~!vendors成员;V1V2V3V4V5V6V7V8~TOC\o"1-5"\h\zI1=^.!产量;60 55 51 43 41 52 ~!销量;35 37 22 32 41 32 43 38~!单位运输费用矩阵;6 2 6 7 4 2 5 94 9 5 3 8 5 8 25 2 1 9 7 4 3 37 6 7 3 9 2 7 12 3 9 5 7 2 6 5把记录结束标记(~)之间的数据文件部分称为记录。如果数据文件中没有记录结束标记,那么整个文件被看作单个记录。注意到除了记录结束标记外,模型的文本和数据同它们直接放在模型里是一样的。我们来看一下在数据文件中的记录结束标记连同模型中@file函数调用是如何工作的。当在模型中第一次调用@file函数时,LINGO打开数据文件,然后读取第一个记录;第二次调用@file函数时,LINGO读取第二个记录等等。文件的最后一条记录可以没有记录结束标记,当遇到文件结束标记时, LINGO会读取最后一条记录,然后关闭文件。如果最后一条记录也有记录结束标记,那么直到LINGO求解完当前模型后才关闭该文件。如果多个文件保持打开状态,可能就会导致一些问题,因为这会使同时打开的文件总数超过允许同时打开文件的上限16。2.把数据(计算结果)写入文本文件用函数@text可以把计算结果写入文本文件,使用格式是:@text('jg.txt')= 变量名;该语句通常放在数据段,其中参数'jg.txt' 是文件名,它可以由用户按自己的意愿随意起名字,如果文件不存在,则在当前目录下生成这个文件,如果文件已经存在,则其中的内容将会被覆盖。文件名可以包含完整的目录路径名,如果没有指定路径,则默认路径是LINGO的当前目录。例:职员时序安排模型一项工作一周7天都需要有人(比如护士工作),每天(周一至周日)所需的最少职员数为 20、16、13、16、19、14和12,并要求每个职员一周连续工作5天,试求每周所需最少职员数,并给出安排。注意这里我们考虑稳定后的情况。model:sets:days/mon..sun/:required,start;endsetsdata:!每天所需的最少职员数;required=20161316191412;@text('d:\out.txt')=days'至少需要的职员数为'start;enddata!最小化每周所需职员数;min=@sum(days:start);@for(days(J):@sum(days(I)|I#le#5:start(@wrap(J+I+2,7)))>=required(J));end三、LINGO与Excel文件之间的数据传递LINGO通过@ole函数实现与Excel文件传递数据,使用@ole函数既可以从Excel文件中导入数据,也能把计算结果写入Excel文件。1.从Excel文件中导入数据@ole函数只能用在模型的集合定义段、数据段和初始段,使用格式可以分成以下几种类型:(1)变量名1,变量名2=@ole('文件名','数据块名称1','数据块名称2');从指定的Excel文件读取数据,文件名可以包括扩展名(.xls),还可以包含完整的路径目录名称,如果没有指定路径,则默认路径是LINGO的当前工作目录。该文件中定义了两个数据块,其中的数据分别用来对变量1和变量2初始化。如果变量名是集合,则对应数据块应该是文本格式表示的集合成员名,如果变量名是集合的属性,则对应数据块应该是一系列数字,并且,若变量是初始集合的属性,则对应的数据块应当是一列数据,若变量是二维衍生集合的属性,则对应数据块应当是二维矩形数据区域。 @ole函数无法读取三维数据区域。(2) 变量名1,变量名2=@ole('文件名','数据块名称');左边的两个变量必须定义在同一个集合中,@ole的参数仅指定一个数据块名称,该数据块应当包含类型相同的两列数据,第1列赋值给变量1,第2列赋值给变量2。(3) 变量名1,变量名2=@ole('文件名');没有指定数据块名称,默认使用Excel文件中与变量名同名的数据块。2•将计算结果导出到Excel文件中使用@ole函数能把计算结果写入Excel文件,使用格式也有以下三种:(1)@ole('文件名','数据块名称1','数据块名称2')=变量名1,变量名2;将两个变量的内容分别写入指定文件的两个预先已经定义了名称的数据块,数据块的长度(大小)不应小于变量所包含的数据,如果数据块原来有数据,则@ole写入语句运行后原来的数据将被新的数据覆盖。(2) @ole('文件名',’数据块名称')=变量名1,变量名2;两个变量的数据写入同一数据块(不止 1列),先写变量1,变量2写入另外1列。(3) @ole('文件名')=变量名1,变量名2;不指定数据块的名称,默认使用Excel文件中与变量名同名的数据块。例:投资组合问题。某三种股票(A,B,C)12年(1998~2009)的投资收益率R,i=1,2,3)如下表所示(表中还列出各年度500种股票的指数供参考)。假设你在2010年有一笔资金打算投资这三种股票,希望年收益率达到1.15,试给出风险最小的投资方案。表三种股票1998~2009年的收益率年份股票A股票B股票C股票指数19981.31.2251.1491.25899719991.1031.291.261.19752620001.2161.2161.4191.36436120010.9540.7280.92290.91928720020.9291.1441.16491.05708020031.0561.1070.9651.05501220041.0381.3211.13310891.3051.7321.31713020061.091.1951.0211.24016420071.0831.391.131910350.9281.0061.25899720091.1761.7151.9081.526236分析:设投资三种股票的资金份额分别为^(i=1,2,3),则有0_Xi_1, Xi=1iA3投资的年收益率为丫 xRj,其中Ri是第i种股票的年收益率,它是随机变量,2可以用每种股票12年的平均收益率Ri代表该股票年收益率的数学期望E(Ri),3则Y的数学期望为EY,投资者希望年收益率达到1.15,数学表达式为i.13XiRi_1.15i仝用什么来衡量投资的风险呢?建议用收益率的方差或标准差来衡量, 即方差越大则风险越大,反之则风险小。按概率论知识,丫的方差为TOC\o"1-5"\h\z3 32DY=D(' XjRj) ='xiD(R」亠2x^2cov( Rt ,R2)亠2Xtx3 cov( Rt,R3)亠2x2x3 cov( R2, R3)i土 iA上式可以写成3 3DY-aXjXjcov(Ri,Rj)i土j=1因此,该问题的数学模型为:3 3minf二''Xixjcov(Ri,Rj)i=1j=13 _ZXiRi>1.1530_Xj_1,'xi=1Ii解:1.Excel中输入数据:
ABC J股票扌旨数1.31.2251.1491.2589971.1031,291.261.1975261.2161.2161.4191.3643610..95467280.9220,9192870.929L1441.1691.057081.056L1070+9651.0550121.0381.3211,133L1879251.0891.3051,7321,317131.091.1951.0211.240164L0831.39k131L1836751.0350.928L0060+9901081.1761,7151,9081.5262362•计算协方差阵:点击“工具”一“数据分析”一“协方差”,ABcD1ABC\2A0.0099073B0.0113730.0535264C60119360.0508080.086375协方差矩阵是对称阵。3•计算均值利用average函数完成,计算得到三种股票的平均收益率分别为1.0890831.2136671,2345834.实现LINGO与Excel的数据交换1)在Excel中给数据所在区域命名选中数据区域,选择“插入”一“名称”,定义名称covmean。计算结果中的决策变量x有三个分量,我们准备把它写入到ExceI文件,为此预先在Excel中定义能写得下3个数据的数据块,选中某一列的3个格子,把
它的名称定义为“投资份额”2)以“投资组合.xls”存盘5.编写LINGO程序model:setsstocks/A,B,C/:mean,x;stst(stocks,stocks):cov;endsets!stocks/A,B,C/:mean,x;stst(stocks,stocks):cov;endsets!定义三种股票;!cov为协方差矩阵;datadata:mean=@ole('c:/lingo8/cov=@ole('c:/lingo8/@ole('c:/lingo8/enddata投资组合mean=@ole('c:/lingo8/cov=@ole('c:/lingo8/@ole('c:/lingo8/enddata投资组合','mean');
投资组合','cov');投资组合','投资份额')=x;min=@sum(stst(i,j):cov(i,j)*x(i)*x(j));@sum(stocks:x)=1;@sum(stocks:mean*x)>=1.15;End运行结果如下:min=@sum(stst(i,j):cov(i,j)*x(i)*x(j));@sum(stocks:x)=1;@sum(stocks:mean*x)>=1.15;End运行结果如下:Localoptimalsolutionfoundatiteration:CtojsetivevslJLue:14D・2054596E-01Expor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度农机租赁市场准入合同范本资讯4篇
- 二零二五版拌合料生产技术改造与升级合同4篇
- 二零二五版建筑工地劳务用工与绿色施工技术研发与推广合同3篇
- 二零二五版旧设备买卖及拆解回收再利用合同3篇
- 2025年度绿色交通募集资金三方监管与执行合同4篇
- 二零二五年度少儿兴趣班教室租赁及教学用品供应合同4篇
- 二零二五年度科技园区场地租赁及研发合作合同4篇
- 关于2025年度民法典规定协议离婚期限及法律支持4篇
- 二零二五年度智慧社区建设合同投标单位保密保证
- 二零二五年度外架工程风险评估与控制服务合同
- 物业民法典知识培训课件
- 2023年初中毕业生信息技术中考知识点详解
- 2024-2025学年八年级数学人教版上册寒假作业(综合复习能力提升篇)(含答案)
- 《万方数据资源介绍》课件
- 医生定期考核简易程序述职报告范文(10篇)
- 第一章-地震工程学概论
- 《中国糖尿病防治指南(2024版)》更新要点解读
- 初级创伤救治课件
- 交通运输类专业生涯发展展示
- 2024年山东省公务员录用考试《行测》试题及答案解析
- 神经重症气管切开患者气道功能康复与管理专家共识(2024)解读
评论
0/150
提交评论