前言

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. hdu3974-Assign the task-(dfs+线段树)

    题意:有n个人,有上下级关系,有m个操作,有两种操作1.把一个任务分给某个人,他的下属也会停下手中工作和他一起做:2.查询某个人的当前任务是什么? 解题:n-1个关系,总有一个人没有上级,以他为根节点 ...

  2. AsciiDoc 的相关整理

    Asciidoc Book Editor based on JavaFX 8  Asciidoc FX is a book / document editor to build PDF, Epub, ...

  3. Cyclical Quest CodeForces - 235C (后缀自动机)

    Cyclical Quest \[ Time Limit: 3000 ms\quad Memory Limit: 524288 kB \] 题意 给出一个字符串为 \(s\) 串,接下来 \(T\) ...

  4. MATLAB画图笔记

    plot函数 plot(x,y)默认格式: 若x,y是向量,则它们必须具有相同的长度.函数将以x为横轴,绘制y. 若x,y都是矩阵,则它们必须具有相同的尺寸,plot函数将针对x的各列绘制y的每列.更 ...

  5. BZOJ2151/洛谷P1792 题解

    若想要深入学习反悔贪心,传送门. Description: 有 \(n\) 个位置,每个位置有一个价值.有 \(m\) 个树苗,将这些树苗种在这些位置上,相邻位置不能都种.求可以得到的最大值或无解信息 ...

  6. PTES渗透测试执行标准

    渗透测试注意事项: 1:测试一定要获得授权方才能进行,切勿进行恶意攻击 2:不要做傻事 3:在没有获得书面授权时,切勿攻击任何目标 4:考虑你的行为将会带来的后果 5:天网恢恢疏而不漏 渗透测试执行标 ...

  7. Shell脚本中$0、$?、$!、$$、$*、$#、$@的意义

    $0 当前脚本的文件名$n 传递给脚本或者函数的参数,脚本后的第n个字符串,n=1…9$# 传递给脚本或者函数的参数个数$? 上一个命名的退出状态,或者函数的返回值(非0表示错误)$$ shell本身 ...

  8. adb 常用命令一

    1.install 和uninstall adb -s 设备号 install 安装包路径   adb uninstall package名 2.pull 和push: adb pull /sdcar ...

  9. 【Alpha】“北航社团帮”小程序v1.0测试报告

    目录 测试计划.过程和结果 后端单元测试 后端压力测试 测试结果 指标解释 前端测试 授权登录与权限检查 功能测试 兼容性测试 性能测试 回答课程组问题 测试中发现的bug 场景测试 测试矩阵 出口条 ...

  10. API调试工具--------Postman

    Postman一款非常流行的API调试工具.其实,开发人员用的更多.因为测试人员做接口测试会有更多选择,例如Jmeter.soapUI等.不过,对于开发过程中去调试接口,Postman确实足够的简单方 ...