简学LINGO(三)——实例篇

1. 装配线平衡模型

一个装配线含有一系列的工作站。在终于产品的加工过程中每一个工作站运行一种或者是几种特定的任务。装配线周期是指全部工作站完毕分配给他们各自任务所花费时间的最大值。平衡装配线的目标是为每一个工作站分配加工任务。尽可能使每一个工作站运行同样数量的任务。其终于标准是转配线周期最短。

不适当的平衡装配线将会产生瓶颈——有较少任务的工作站将被迫等待前面分配了较多任务的工作站。

这个模型的目标是最小化装配线周期。有两类约束:

(1)要保证每件任务仅仅能也必须分配至一个工作站来加工;

(2)要保证满足任务件的全部优先关系。

例  有1件任务(A-K)分配到四个工作站(1-4),任务按次序例如以下。每件任务所花时间例如以下

任务

时间

A

45

B

11

C

9

D

50

E

15

F

12

G

12

H

12

I

12

J

8

K

9

 

这里给出求解模型

model:!装配平衡模型;
sets:!任务集合,有一个完毕时间属性T;TASK/A B C D E F G H I J K/:T;!人物之间的优先关系集合;PRED(TASK,TASK)/A,B B,C C,F C,G F,J G,J J,KD,E E,H E,I H,J I,J/;!工作站集合;STATION/1..4/;TXS(TASK,STATION):X;!X是派生集TXS的一个属性。

假设X(I,K)=I,则表示第I个任务指派给第K个工作站完毕; endsets data: !任务A B C D E F G H I J K的完毕时间预计例如以下; enddata !当任务超过15个时,模型求解将变的非常慢: !每个作业必须指派到一个工作站中; @for(TASK(I):@SUM(STATION(K):X(I,K))=1); !对于每个存在有限关系的作业来说。前者相应的工作站I必须小于后者相应的工作站J; @for(PRED(I,J):@sum(STATION(K):K*X(J,K)-K*X(I,K))>=0); !对于每个工作站来说,其花费时间不应大于装配线周期; @for(STATION(K): @SUM(TXS(I,K):T(I)*X(I,K))<+CYCTIME); !目标函数时最小化转配线周期; min=CYCTIME; !指定X(I,J)为0/1变量; @for(TXS:@BIN(X)); end

 

 

2.旅行售货员问题,又称货郎担问题

有一个销售员,从城市1出发。要遍訪城市2,3,。。

。,n个一次。最后返回城市1.已知从城市i到j的旅费为Cij,问他该按如何的次序訪问这些城市,是得总旅费最少?能够用多中方方法把TSP表示成整数规划模型。把该问题的每个解看做时一个巡回。

在上述意义下,引入0-1整数变量
 

经过若干证明。这里就不在阐述了,我们能够把TSP转化为一个混合整数规划问题

 

 

 这里我们能够利用这个问题来求解一个详细问题

 问题1  现须要一台机器上加工n个零件。这些零件能够依照随意先后顺序在机器上进行加工。我们希望加工完毕全部零件的总时间最小。因为加工工艺的要求,加工零件j时机器不许处在对应的状态Sj(如炉温)。设起始未加工不论什么零件时机器处于状态S0。且当全部零件加工完毕后需回复到S0状态。已知从状态Si调整到Sj须要时间Cij。零件j本身加工时间为Pj。

为方便起见,引入一个徐零件0,当中加工时间为0。要求状态为S0。则{0,1,2,。。

,n}的一个圈置转换pi就表示对全部零件的一个加工顺序。则完毕全部加工所需时间为

 

这里给出一个解决该模型的一个简单的代码。就是套用上面的模型

!旅行售货员问题;
model:
sets:city/1..5/:u;link(city,city):dist,x;
endsetsn=@size(city);
data:dist=@qrand(1);!随即产生。这里能够改为你要解决的问题的数据;
enddata!目标函数;
min=@sum(link:dist*x);
@for(city(K):@sum(city(I)|I#ne#K:x(I,K))=1;@sum(city(J)|J#ne#K:x(K,J))=1;
);!保证不出圈子;
@for(city(I)|I#gt#1:@for(city(J)|J#gt#1 #and# I#ne#j:u(I)-u(J)+n*x(I,J)<=n-1);
);
!定义X为0/1变量;
@for(link:@bin(x));
end


3.最短路问题

给定N个点Pi组成集合{Pi}。由集合中任一点Pi到还有一点Pj的距离用Cij表示,假设Pi到Pj没有弧连接,则规定Cij=正无穷大,有规定Cii=0,指定一个终点PN。要求从Pi到PN的最短路线。这里我们用动态规划的方法来做。

 

 又LINGO我们能够非常方便的求解上述的模型

!最短路问题;
model:
data:n=10;
enddata
sets:cities/1..n/:F;roads(cities,cities)/1,2 1,32,4 2,5 2,63,4 3,5 3,64,7 4,85,7 5,8 5,96,8 6,97,108,109,10
/:D,P;
endsets
data:
D=6 5                 !该矩阵即为传说中的权重矩阵3 6 97 5 119 18 7 54 10579;
enddata
F(n)=0;
@for(cities(i)|i#lt#n:F(i)=@min(roads(i,j):D(i,j)+F(j));
);
!显然。假设P(i,j)=1,则点i到点n的最短路径的第一步是i——j,否则就不是
由此,我们就可方便的确定出最短路径;
@for(roads(i,j):P(i,j)=@if(F(i)#eq#D(i,j)+F(j),1,0)
);
end

 

4.分配问题或称指派问题

这是给n个人分配n项工作以或得摸个最高效果的问题。

第i个人完毕第j项工作须要的平均时间为Cij。

要求给每一个人分配一项工作。并要求分配完这些工作,以使完毕所有任务的总时间最小。该问题能够表演示样例如以下
 

 这个模型能够用LINGO非常方便的求解

model:!7个工人,7个工作的分配问题;
sets:workers/w1..w7/;jobs/j1..j7/;links(workers,jobs):cost,volume;
endsets!目标函数;min=@sum(links:cost*volume);!每一个人仅仅能有一份工作;@for(workers(I):@sum(jobs(J):volume(I,J))=1;);
data:cost=6 2 6 7 4 2 54 9 5 3 8 5 85 2 1 9 7 4 37 6 7 3 9 2 72 3 9 5 7 2 65 5 2 2 8 11 49 2 3 12 4 5 10;
enddata
end 	


 

5.二次分配问题

这个问题与上面的分配问题 。大致相同。相同要引入0-1变量,并且和上述问题有相同的约束 。可是本问题又比约束问题要复杂。我们得到价格系数Cijkl,其解释是:在i(S上网一个元素)分配给j(T的一个元素)的同一时候把k(s的一个元素)分配给l(T的一个元素)所应承担的费用。显然仅仅有当xij=1且xkl=1时,才承担这样的费用。

这时我们的模型要变成这样

 为了理解这个模型。我们在这里增加这个样例。

首先觉得S是一个工厂的集合。T是n个城市的集合。本问题就是要在每个城市设置一个工厂,并要使工厂之间的总得通讯费用最少。通讯费用取决于:(1)每对工厂之间通讯的次数tik;(2)每对工厂所在两个城市之间的距离djl。所以就有cijkl=tik*djl(各位大仙凑活的看啊。。。)。

因此总费用能够用上述的目标函数来表示。

这里给出一个非常经典的题目,也是我遇到的第一道建模问题。想当年不知道lingo的优点。硬是凭着对C++的执拗,用了一堆栈啊。链表向量什么的用穷举给退出来啊,当时多么的自豪。哈哈哈

 

例:有四名同学到一家公司去參加三个阶段的面试:公司要求每一个同学必须先找秘书初试,然后到部门主管去复制。最后到经理处去面试,而且不同意插队。因为四名同学的专业背景不同,所以没人在三个阶段的面试时间也不一样,例如以下表。

这四名同学约定他们所有面试完毕以后一起离开公司,问他们最快用多长时间完毕面试?

 

这里给出求解的代码

 

!三阶段面试模型;
model:
sets:students;!学生集三阶段面试模型;phases;!阶段集;sp(students,phases):t,x;ss(students,students)|&1 #lt# &2:y;
endsets
data:students=s1..s4;phases=p1..p3;t=13 15 2010 20 1820 16 108  10 15;
enddatans=@size(students);!学生数;np=@size(phases);!阶段数!单个学生面试时间先后顺序的约束;@for(sp(I,J)|J#LT#np:x(I,J)+t(I,J)<=x(I,J+1));!学生间的面试先后次序保持不变的约束;@for(ss(I,K):@for(phases(J):x(I,J)+t(I,J)-x(K,J)<=200*y(I,K);x(K,J)+t(K,J)-x(I,J)<=200*(1-y(I,K));));min=TMAX;@for(students(I):x(I,3)+t(I,3)<=TMAX);!把Y定义0-1变量;!把Y定义0-1变量;@for(ss:@bin(y));
end


 以后假设遇到对应的更好的模型是,我会有选择的加上的。

 

 

 

 

 

转载于:https://www.cnblogs.com/bhlsheji/p/5319476.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android之卫星菜单的实现

卫星菜单是现在一个非常受欢迎的“控件”&#xff0c;很多Android程序员都趋之若鹜&#xff0c;预览如下图。传统的卫星菜单是用Animation实现的&#xff0c;需要大量的代码&#xff0c;而且算法极多&#xff0c;一不小心就要通宵Debug。本帖贴出用属性动画Animator来实现卫星菜…

为云量身定制您的服务

相信大家都听说过Amazon的AWS。作为业内最为成熟的云服务提供商&#xff0c;其运行规模&#xff0c;稳定性&#xff0c;安全性都已经经过了市场的考验。时至今日&#xff0c;越来越多的应用被部署在了AWS之上。这其中不乏Zynga及Netflix这样著名的服务。 然而这一切并没有停滞不…

在Vaadin和JSF之间选择

随着最新版本的Primefaces 3.0的发布&#xff0c;JSF终于达到了前所未有的成熟度和实用性&#xff0c;使其与其他流行的Rich Internet Applications&#xff08;RIA&#xff09;选项如Google Web Toolkit&#xff08;GWT&#xff09;&#xff0c;ExtJS&#xff0c;Vaadin&#…

flask开发restful api系列(1)

在此之前&#xff0c;向大家说明的是&#xff0c;我们整个框架用的是flask sqlalchemy redis。如果没有开发过web&#xff0c;还是先去学习一下&#xff0c;这边只是介绍如果从开发web转换到开发移动端。如果flask还不是很熟悉&#xff0c;我建议先到这个网站简单学习一下&am…

JS显示当前时间(包含农历时间)

时间格式&#xff1a; JavaScript代码&#xff1a; var sWeek new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");var dNow new Date();var CalendarData new Arra…

MyBatis操作指南-与Spring集成(基于注解)

转载于:https://www.cnblogs.com/weilu2/p/mybatis_spring_integration_basic_on_annotation.html

JVM:如何分析线程转储

本文将教您如何分析JVM线程转储&#xff0c;并查明问题的根本原因。 从我的角度来看&#xff0c;线程转储分析是掌握Java EE生产支持的任何个人最重要的技能。 您可以从线程转储快照中获取的信息量通常远远超出您的想象。 我的目标是与您分享我在过去10年中积累的有关线程转储分…

极光推送JPush的快速集成

首先到极光推送的官网上创建一个应用&#xff0c;填写对应的应用名和包名。 创建好之后下载Demo 提取Sdk里面的图片和xml等资源文件放自己项目的相应位置&#xff0c;然后要注意的是.so文件的放置位置&#xff1a; 在main目录下新建一个jniLibs文件夹&#xff0c;放在这个文件夹…

elk系列1之入门安装与基本操作

preface 我们每天都要查看服务器的日志&#xff0c;一方面是为了开发的同事翻找日志&#xff0c;另一方面是巡检服务器查看日志&#xff0c;而随着服务器数量以及越来越多的业务上线&#xff0c;日志越来越多&#xff0c;人肉运维相当痛苦了&#xff0c;此时&#xff0c;参考现…

Java 7 –反编译项目硬币

大家好&#xff0c;该是从2012年开始写作的时候了。正如您在其他博客中可能已经看到的那样&#xff0c;有一些更改可以使您使用Java编程时的开发人员生活变得更加轻松&#xff1a;Diamond运算符&#xff0c;Switchs中的Strings&#xff0c;尝试使用资源&#xff0c;多次捕获等 …

在Excel表里面插入背景图

工作中我们会经常用到MS Excel&#xff0c;通常我们打开MS Excel&#xff0c;里面的工作表都是空白单调的背景。当然了&#xff0c;MS Excel可以在工作簿里面插入背景图片。那么问题来了&#xff0c;如果你没有安装Microsoft Office&#xff0c;该如何在Excel文件里面插入好看的…

实现两级下拉框的联动

1.实现两级下拉框的联动。 功能&#xff1a;实现点击年级下拉框&#xff0c;加载对应科目的下拉框。 第一步&#xff1a;首先要加载年级下拉框中的数据。 01.在GradeDAL层&#xff08;数据访问层&#xff09;写一个方法&#xff0c;查询所有年级的信息。 /// <summary>//…

python连接SQL Server取多个结果集:Pymssql模块

基本的用法可以参考&#xff1a;python连接SQL Server&#xff1a;Pymssql模块 和上一篇文章中的代码&#xff0c;只取一个结果集不同&#xff0c;这次会一次运行2个sql语句&#xff0c;然后分别取出2个结果集&#xff0c;打印输出。 代码中有详细的注释&#xff0c;一看就明白…

Xen安全架构sHype/ACM策略配置图文教程

实验要求 1. 熟悉Xen虚拟化平台部署&#xff1b; 2. Xen sHype/ACM安全架构中的Simple TE和Chinese Wall策略及事实上现机制的分析与验证。 第1章 Xen环境部署 1.1 版本号选择 因为Ubuntu使用广泛。软件包易于下载。我们选择Ubuntu系统进行Xen部署…

java弹出虚拟键盘_JS实现电脑虚拟键盘的操作

本文实例为大家分享了JS实现电脑虚拟键盘的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下需求&#xff1a;1.当输入框光标聚焦时&#xff0c;电脑虚拟键盘弹出2.在输入框输入内容时&#xff0c;键盘跟着变化具体实现代码如下&#xff1a;Html部分&#xff1a;电脑键…

JBoss Drools –入门

这篇文章是关于我如何掌握JBoss Drools的 。 其背后的原因是&#xff1a;SAP收购了我公司当前的规则引擎&#xff0c;而Drools是我们将寻找的另一种选择&#xff0c;只要有人掌握了概念验证的技能即可。 尽管似乎有大量的文档&#xff0c;但是我总是会通过示例来发现它是有帮助…

android使用bintray发布aar到jcenter

前言 这两天心血来潮突然想把自己的android library的aar放到jcenter里面&#xff0c;这样一来自己便可以在任何时间任何地点通过internet得到自己的library的引用了&#xff0c;况且现在android studio已经默认使用jcenter的repositories作为依赖来源&#xff0c;以前的mavenc…

PHP 进程详解

PHP 进程详解PHP 进程详解 如下内容从《操作系统精髓与设计原理》中总结提炼得出&#xff0c;删除了大部分对于理解进程有干扰的文字&#xff0c;对进程知识结构进行的梳理。几乎所有内容为按照书本上摘抄下来的&#xff0c;我目前还总结提炼不出像作者这么深刻的见解。那么就先…

java都要caps标点_第 1 章 管理 Java CAPS 用户

第 1 章 管理 Java CAPS 用户在此处列出的主题提供了有关如何管理 Sun JavaTM Composite Application Platform Suite (Java CAPS) 中的用户的信息。如果您有任何问题&#xff0c;请参见 http://goldstar.stc.com/ 中的 Java CAPS Web 站点。管理系统信息库用户此类别包含以下用…

基于OpenCV 的美颜相机推送直播流

程序流程&#xff1a; 1.图像采集 先从opencv&#xff08;2.4.10版本&#xff09;采集回来摄像头的图像&#xff0c;是一帧一帧的 每一帧图像是一个矩阵&#xff0c;opencv中的mat 数据结构。 2.人脸的美化 人脸美化&#xff0c;我们用的皮肤检测&#xff0c;皮肤在颜色空间是特…