前言

LINGO 作为非线性规划运算的专用软件,得出结果一般都是纯文本的一列数据,要想将数据呈现到论文当中,需要整理到 EXCEL 中,使用复制粘贴容易出错还费时,所以必须要动用函数来提高效率!

案例场景

有这样一个例子,求发电机厂一天7各时段对4台不同机型的发电机分配开启数量以及输出功率,用LINGO求解,最后需要将7*4=28的数量数据N,以及对应功率P,输出到EXCEL中。如下图所示:

这里的台数和功率都是7行4列的数据。

而利用LINGO算出来的纯文本导出数据长这样:

没错,就这种一路排到底的输出格式,如果是手动复制粘贴,岂不是眼睛都要瞎掉?不过这里值得注意的是,数据的输出是按行输出的,先是N(1,:),再是N(2,:)

EXCEL 之定义名称

EXCEL中,使用定义名称,可以将某一块的数据赋予一个指定的名字,这样就和程序里的数据初始化一样,比如定义一个数组,首先要给他一个名字,然后再被其他函数调用。在EXCEL里定义名称的数据可以被宏函数调用。而LINGO也可以通过函数来调用EXCEL中定义了名称的数据。

如何定义名称?

以前面的台数表格为例,框选对应的 7*4 的数据区域,CTRL + F3 ,会弹出窗口(如果没反应,就点击顶部功能栏"公式",找到"定义名称",一样可以弹出窗口),设置名称为NUM,确定。同理可以给功率命名为 POW

命名完了之后,在表格的左上角下拉可以看到已经命名好的数据,包括了NUMPOW

最后将表格保存为 Q1_Output.xls ,(或者.xlsx格式,.xls格式时,在调用时可以省去后缀,而.xlsx格式必须加上后缀)。保存好了后,把表格打开,放在一边,不要关闭,因为LINGO写入数据时,可能因为权限不够的原因,关闭状态下的EXCEL无法写入,而后台打开状态时可以写入。

LINGO 之 @OLE

LINGO自带的ole函数可以负责与EXCEL传递数据。语法如下:

!data为数据表,x为表格内标记为x名称的某块区域;

X = @ole('data.xls','x');!从EXCEL导入数据到LINGO;

@ole('data.xls','x') = X;!从LINGO导出数据到EXCEL;

所以为了导出我们的N、P数据,我们写如下代码到 data:里

@OLE('Q1_Output','NUM')=N;

@OLE('Q1_Output','POW')=P;

完整代码如下:

model:
sets:
A /1..7/: T, D ;
B /1..4/:N0,Pmax,Pmin,F,M,S;
U(A,B): N, P ;
endsets data:
T = 6 3 3 2 4 4 2;
D = 11000 33000 25000 36000 25000 30000 18000;
N0 = 10 5 8 4;
Pmax=1800 1500 2000 3500;
Pmin= 800 1000 1200 1800;
F =2200 1800 3800 4600;
M = 2.7 2.2 1.8 3.6;
S =4000 1500 2500 1000;
@OLE('Q1_Output','NUM')=N;
@OLE('Q1_Output','POW')=P;
enddata W1 =@sum(B(j):N(1,j)*S(j))+@sum(A(i)|i#ge#2:
@sum(B(j):(N(i,j)-N(i-1,j)+@abs(N(i,j)-N(i-1,j)))
/2*S(j))); W2=@sum(A(i): @sum(B(j):N(i,j)*F(j)*T(i))); W3=@sum(A(i): @sum(B(j):(P(i,j)-Pmin(j))*
N(i,j)*M(j)*T(i))); min =W1+W2+W3; @for(A(i): @sum(B(j):P(i,j)*N(i,j)) >=D(i));
@for(U(i,j):N(i,j)>=0);
@for(U(i,j):N(i,j)<=N0(j));
@for(U(i,j):@gin(N(i,j)));
@for(U(i,j):Pmin(j)<=P(i,j));
@for(U(i,j):P(i,j)<=Pmax(j)); end

一键导出数据

做好前面两步,即EXCEL数据输出区域命名,还有LINGO导出数据函数,最后把EXCEL打开放在屏幕左边,LINGO放右边,点击solve,坐等程序跑完,EXCEL中就惊现数据了,是不是很nice!?

LINGO与EXCEL之间的数据传递的更多相关文章

  1. ASP.NET MVC3中Controller与View之间的数据传递

    在ASP.NET MVC中,经常会在Controller与View之间传递数据,因此,熟练.灵活的掌握这两层之间的数据传递方法就非常重要.本文从两个方面进行探讨: 一.  Controller向Vie ...

  2. Activity之间的数据传递

    最常用的Activity之间的数据传递. btnStartAty1.setOnClickListener(new View.OnClickListener() { @Override public v ...

  3. ASP.NET MVC 之控制器与视图之间的数据传递

    今天,我们来谈谈控制器与视图之间的数据传递. 数据传递,指的是视图与控制器之间的交互,包括两个方向上的数据交互,一个是把控制器的数据传到视图中,在视图中如何显示数据,一个是把视图数据传递到控制器中, ...

  4. (转载)Javascript操作表单之间的数据传递

    (转载)http://www.aspxhome.com/javascript/skills/200710/214825.htm 今天有朋友问我关于用JAVASCRIPT来进行页面各表单之间的数据传递的 ...

  5. iOS开发中视图控制器ViewControllers之间的数据传递

    iOS开发中视图控制器ViewControllers之间的数据传递 这里我们用一个demo来说明ios是如何在视图控制器之间传递重要的参数的.本文先从手写UI来讨论,在下一篇文章中讨论在storybo ...

  6. React中父组件与子组件之间的数据传递和标准化的思考

    React中父组件与子组件之间的数据传递的的实现大家都可以轻易做到,但对比很多人的实现方法,总是会有或多或少的差异.在一个团队中,这种实现的差异体现了每个人各自的理解的不同,但是反过来思考,一个团队用 ...

  7. Vue 爬坑之路(二)—— 组件之间的数据传递

    Vue 的组件作用域都是孤立的,不允许在子组件的模板内直接引用父组件的数据.必须使用特定的方法才能实现组件之间的数据传递. 首先用 vue-cli 创建一个项目,其中 App.vue 是父组件,com ...

  8. sqoop实现关系型数据库与hadoop之间的数据传递-import篇

    由于业务数据量日益增长,计算量非常庞大,传统的数仓已经无法满足计算需求了,所以现在基本上都是将数据放到hadoop平台去实现逻辑计算,那么就涉及到如何将oracle数仓的数据迁移到hadoop平台的问 ...

  9. Activity之间的数据传递-android学习之旅(四十七)

    activity之间的数据传递主要有两种,一种是直接发送数据,另一种接受新启动的activity返回的数据,本质是一样的 使用Bundle传递数据 Intent使用Bundle在activity之间传 ...

随机推荐

  1. 使用solr将CSV/XML/DB/JSON数据发布为Rest Service

    Download http://lucene.apache.org/solr/downloads.html Apache Solr入门基础——Windows下安装与配置 https://blog.cs ...

  2. golang 配置goproxy 几个可选的地址

    对于golang 语言的开发,对于国内来说有点被动,需要想各种方法,一般的解决方法如下: 使用代理工具(翻墙) 配置goproxy 目前发现的几个不错的goproxy 阿里云 配置如下:   expo ...

  3. singer tap-minio-csv 使用

    使用tap-minio-csv 我们可以将s3 中csv 的文件,通过singer 的target 写到不用的系统中,可以兼容 s3 的存储类型,以下是一个集成minio 的测试,将minio 中的c ...

  4. vcenter监控

    在vcenter上配置好用户名密码和url即可使用自动发现自动发现vmware

  5. pfx格式和cer格式的区别

    来一篇大神的帖子就都懂了. 版权声明:本文为CSDN博主「天府云创」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn. ...

  6. [golang][gui]Hands On GUI Application Development in Go【在Go中动手进行GUI应用程序开发】读书笔记03-拒交“智商税”,解密“GUI”运行之道

    和老外的原文好像没多大联系了,哈哈哈,反正是读书笔记,下面的内容也是我读此书中的历程,也写进来吧.不过说实话,这框架的作者还挺对我脾气的,哈哈哈. 拒交“智商税”,解密“GUI”运行之道 我很忙 项目 ...

  7. mark一下咕掉的题目

    蒟蒻才普及组呀~ 大佬别D我 等集中补一下 CF980F:咋说捏,我觉得要联赛了做这题有点浪费时间,等想颓废了再来写写叭qwq 215E/279D/288E/331C3/431D/433E/750G/ ...

  8. 如何在Docker容器之间拷贝数据

    [编者的话]在容器之间拷贝数据是Docker一个重要而且基本的功能.拷贝数据到其他容器是一个经常使用到的场景,如当服务器遇到不可预见的“灾难”(注:断电,宕机)时,起到备份数据的作用.本文作者详细介绍 ...

  9. Spring系列:下载

    Spring 官网:http://projects.spring.io/spring-framework/ Spring下载地址:https://repo.spring.io/simple/libs- ...

  10. 微信小程序调用微信支付接口

    本文链接:https://blog.csdn.net/u012667477/article/details/80940578前言:应项目要求,需要使用微信小程序做支付,写完后告知手续费太高方案不予通过 ...