lingo学习(三):运算符与内置函数

lingo学习(三):运算符与内置函数

运算符

——算数运算符

lingo学习(三):运算符与内置函数

  • 这道题使用matlab求解效果最好,使用lingo则需要将他转化为方程
x=2;
y=3*x^10+6/(15-@sqrt(x));或y=3*x^10+6/(15-x^(1/2));

——关系运算符

  • 关系运算符往往用在约束条件中,用来指定约束条件左右两边必须满足的关系
  • lingo只有等于、>=、<=三种关系运算符,当输入>或<时,lingo也不会报错,因为他默认为大于等于或小于等于
  • 若要严格表达a大于b,则使用以下形式
B=10;
e=0.0001;
A-e>B;

——逻辑运算符

  • 逻辑运算符唯一出现的位置
    a、for循环与sum循环中
    b、if判断中

lingo学习(三):运算符与内置函数
例题
lingo学习(三):运算符与内置函数
法1

model:
sets:
fac/1..6/:a;
endsets
data
a=6,5,4,3,2,1;
enddata
a(5)+a(5)=y;
end

法2

model:
sets:
fac/1..6/:a;
endsets
data
a=6,5,4,3,2,1;
enddata
y=@sum(fac(i)| i#ge#5 :a(i));或y=@sum(fac(i)| i#gt#5 :a(i));
end

lingo学习(三):运算符与内置函数

model:
sets:
fac/1..6/:a;
endsets
min=@sum(fac(i):a(i));
@for(fac(i)|i#le#2 #or# i#ge#5:a(i)>5);或者@for(fac(i)|i#ne#3 #and# i#ne#4:a(i)>5);
end

lingo学习(三):运算符与内置函数
lingo学习(三):运算符与内置函数

model:
sets:
fac/1..3/: ;
coo(fac,fac):a;
endsets
data:
a=1,2,3
  4,5,6
  7,8,9;
enddata
y=@sum(coo(i,j)|i#le#j:a(i,j));
end

lingo学习(三):运算符与内置函数

内置函数

——if判断

lingo学习(三):运算符与内置函数

  • lingo默认所有变量不为负数,故应先进行定义域*化
  • if函数语法简单
@free(x);
@free(y);
x=-10;!给x一个随机的初值;
y=@if( x#ge#0,x+10,x-10);

lingo学习(三):运算符与内置函数

lingo学习(三):运算符与内置函数

  • if函数通常仅仅在分段函数处出现,一般其出现频率、使用次数非常低
  • lingo中的if函数必须自带一个else,即上图中黑色色块处的语句

——变量定界函数

lingo学习(三):运算符与内置函数
一些例题lingo学习(三):运算符与内置函数
lingo学习(三):运算符与内置函数

  • 出现i=1,2,3……这种的就要用for循环
model:
sets:
fac/1..8/:a,b,x;
endsets
data:
a=2,9,3,8,10,6,4,10;
b=1,3,4,3,3,1,5,10;
enddata
max =@sum(fac(i):a(i)*x(i));
@sum(fac:b*x)<15;
@for(fac:@bin(x));
end

lingo学习(三):运算符与内置函数
lingo学习(三):运算符与内置函数

  • 因为是整数规划,所以需要限定变量为整数,但又由于a,d,c都已经有了数值,所以只限定没有数值的x即可
  • 注意最后一个约束条件的处理方式
  • 该题无解
model:
sets:
fac/1..6/:a,x;
pat/1..5/:b;
coo(fac,pat):c;
endsets
data:
a=2.1,1.0,1.8,1.2,2.0,1.2;
b=5,125,12500,345,5;
c=0.45,20,415,22,0.3
  0.45,28,4065,5,0.35
  0.65,40,850,43,0.6
  0.4,25,75,27,0.2
  0.5,26,76,48,0.4
  0.5,75,235,8,0.6;
enddata
max =@sum(fac(i):a(i)*x(i));
@for(pat(j):@sum(fac(i):c(i,j)*x(i))<b(j));
@sum(fac:x)=14;
x(2)<=3;
x(4)<=2;
@for(fac(i)| i#ne#2 #and# i#ne#4 : @bnd(1,x(i),4) );
@for( fac: @gin(x) );
end

——数学函数

lingo学习(三):运算符与内置函数
lingo学习(三):运算符与内置函数

——集合操作函数

  • @max与@min均为函数,与max或min不同,不能表示目标函数

lingo学习(三):运算符与内置函数

model:
sets:
factory / 1..6 / : a;
endsets
data:
a = 6,5,4,3,2,1;
enddata
prod = @prod(factory : a);
greater = @max(factory : a);
less = @min(factory : a);
in = @in(factory,5);
size = @size(factory);
end

lingo学习(三):运算符与内置函数

上一篇:SP3734 PERIODNI - Periodni 笛卡尔树 DP


下一篇:数学问题——质因子分解(优化)