lingo中一行向量找最大值语法规定
⑴ lingo 一点语法问题
这是用lindo语言写的,用lingo运行当然有问题了
改成下面就可以在lingo里面运行了
max=(a1+a2+a4+0.905*a5+0.175*a6+0.93*a7+0.56*a8+a9+0.335*b2+0.655*b3+0.47*b4+0.83*b5+0.635*b6+b7+0.34*b8+b9+0.44*c1+0.22*c2+c3+0.74*c4+0.14*c6+0.58*c7+0.365*c8+d1+0.295*d2+d3+0.67*d4+0.89*d5+d7+0.625*e3+0.505*e4+e5+0.215*e6+0.86*e7+0.045*e9)/(a1+a2+a3+a4+a5+a6+a7+a8+a9+b1+b2+b3+b4+b5+b6+b7+b8+b9+c1+c2+c3+c4+c5+c6+c7+c8+c9+d1+d2+d3+d4+d5+d6+d7+d8+d9+e1+e2+e3+e4+e5+e6+e7+e8+e9);
a1+a2+a3+a4+a5+a6+a7+a8+a9>1064;
b1+b2+b3+b4+b5+b6+b7+b8+b9>1064;
c1+c2+c3+c4+c5+c6+c7+c8+c9>1064;
d1+d2+d3+d4+d5+d6+d7+d8+d9>1064;
e1+e2+e3+e4+e5+e6+e7+e8+e9>1064;
a1+b1+c1+d1+e1<599;
a2+b2+c2+d2+e2<531;
a3+b3+c3+d3+e3<702;
a4+b4+c4+d4+e4<648;
a5+b5+c5+d5+e5<522;
a6+b6+c6+d6+e6<945;
a7+b7+c7+d7+e7<707;
a8+b8+c8+d8+e8<900;
a9+b9+c9+d9+e9<603;
改成这样更简洁:
sets:
r/1..9/:a,b,c,d,e,f,x,y,z,m,n;
endsets
data:
f=599 531 702 648 522 945 707 900 603;
x=1 1 0 1 0.905 0.175 0.93 0.56 1;
y=0 0.335 0.655 0.47 0.83 0.635 1 0.34 1;
z=0.44 0.22 1 0.74 0 0.14 0.58 0.365 0;
m=1 0.295 1 0.67 0.89 0 1 0 0;
n=0 0 0 0.505 1 0.215 0.86 0 0.045;
enddata
max=@sum(r:a*x+b*y+c*z+d*m+e*n)/@sum(r:a+b+c+d+e);
@sum(r:a)>1064;
@sum(r:b)>1064;
@sum(r:c)>1064;
@sum(r:d)>1064;
@sum(r:e)>1064;
@for(r:a+b+c+d+e<f);
⑵ lingo问题,对专业的人来说很简单的。
语法上没有问题啊。
然后是 data1txt文件应该放在lingo的安装目录下面。例如你是安装在D盘,那么只需要将data1txt文件放在相应的文件夹里面就是了。对于程序是不需要修改的。
下面是我找的关于@FILE语句的用法:
@file函数
该函数用从外部文件中输入数据,可以放在模型中任何地方。该函数的语法格式为@file(’filename’)。这里filename是文件名,可以采用相对路径和绝对路径两种表示方式。@file函数对同一文件的两种表示方式的处理和对两个不同的文件处理是一样的,这一点必须注意。
例4.14 以例1.2来讲解@file函数的用法。
注意到在例1.2的编码中有两处涉及到数据。第一个地方是集部分的6个warehouses集成员和8个vendors集成员;第二个地方是数据部分的capacity,demand和cost数据。
为了使数据和我们的模型完全分开,我们把它们移到外部的文本文件中。修改模型代码以便于用@file函数把数据从文本文件中拖到模型中来。修改后(修改处代码黑体加粗)的模型代码如下:
model:
!6发点8收点运输问题;
sets:
warehouses/ @file('1_2.txt') /: capacity;
vendors/ @file('1_2.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_2.txt') ;
demand = @file('1_2.txt') ;
cost = @file('1_2.txt') ;
enddata
end
模型的所有数据来自于1_2.txt文件。其内容如下:
!warehouses成员;
WH1 WH2 WH3 WH4 WH5 WH6 ~
!vendors成员;
V1 V2 V3 V4 V5 V6 V7 V8 ~
!产量;
60 55 51 43 41 52 ~
!销量;
35 37 22 32 41 32 43 38 ~
!单位运输费用矩阵;
6 2 6 7 4 2 5 9
4 9 5 3 8 5 8 2
5 2 1 9 7 4 3 3
7 6 7 3 9 2 7 1
2 3 9 5 7 2 6 5
5 5 2 2 8 1 4 3
把记录结束标记(~)之间的数据文件部分称为记录。如果数据文件中没有记录结束标记,那么整个文件被看作单个记录。注意到除了记录结束标记外,模型的文本和数据同它们直接放在模型里是一样的。
我们来看一下在数据文件中的记录结束标记连同模型中@file函数调用是如何工作的。当在模型中第一次调用@file函数时,LINGO打开数据文件,然后读取第一个记录;第二次调用@file函数时,LINGO读取第二个记录等等。文件的最后一条记录可以没有记录结束标记,当遇到文件结束标记时,LINGO会读取最后一条记录,然后关闭文件。如果最后一条记录也有记录结束标记,那么直到LINGO求解完当前模型后才关闭该文件。如果多个文件保持打开状态,可能就会导致一些问题,因为这会使同时打开的文件总数超过允许同时打开文件的上限16。
当使用@file函数时,可把记录的内容(除了一些记录结束标记外)看作是替代模型中@file(’filename’)位置的文本。这也就是说,一条记录可以是声明的一部分,整个声明,或一系列声明。在数据文件中注释被忽略。注意在LINGO中不允许嵌套调用@file函数。
⑶ lingo中 如何 取一行 元素
你说清楚你的目标函数是什么 有求和就用@sum 否则你取一行是什么意思 难道你能对一组数求最值?
⑷ lingo中怎么表示一个向量中的任何一个元素
LINGO通过定义集合的方式来使用数组,你可以把集合后面的属性看作向量,而在属性变量后面的采用类似矩阵的引用方式。比如,X(1,2)表示矩阵的第一个行,第二列元素。
⑸ 急:请问如何在LINGO中把行向量中的一个数表示出来
很久没用LINGO了……如果已经声明行向量x 那就直接x(i)就可以了吧
求和大概应该是@sum(x) 好像没有那个i……
⑹ lingo 中要找到一个较长集合中的最大值,用什么函数能举个例子吗
使用@max,寻找一个向量中的最大值
⑺ 用lingo怎么求向量[5,1,3,4,6,10]前5 个数的最小值,后3 个数的最大值.
那你最好说明你要干什么 要表达很简单 用@max就行了 不过如果你写在模型段那可能会有问题
⑻ 如何取表中一行数据的最大值
处理方法:
假定数据区域是A1:F100,在G1输入公式=MAX(A1:F1)或=LARGE(A1:F1,1) 下拉填充。
其中:MAX和LARGE是EXCEL系统提供的两个求最大值的函数,语法规则分别是:
MAX(array)
LARGE(array,k) 其中参数array 为需要找到最大值的数组或数字型数据区域。k 为返回的数据在数组或数据区域里的位置,当求最大值时,K=1。
⑼ lingo解目标函数最大值出现语法错误…求大神解答
少了等号
max = 后面的就不抄了
需要注意的是:等号需要在全英文的状态下输入
⑽ LINGO语法问题
@for(B(n):@sum(E(i):H(1+3*A(n),i)*x(i))+@sum(E(i)|(j-i)#eq#1:H(2+3*A(n),j)*x(j))+@sum(E(i)|(k-i)#eq#2:H(3+3*A(n),k)*x(k))<=3);
改成这样你试一下,,应该没问题了;;
因为每专一个sum语句都是独立的属,所以
@sum(E(j)|(j-i#eq#1):H(2+3*A(n),j)*x(j))里的i没意义