在编程和建模语言中,函数是一段独立的、可重复使用的代码块,用于执行特定任务。在MindOpt APL中,自定义函数的使用非常重要,因为它们提高了建模过程的效率、可读性和灵活性。
def f(x) = if x>10 then x-1 else x+1 end;
check f(1) == 2;
check f(11) == 10;
def g(x) = x*x;
check g(2) == 4;
clear model; # 清空MAPL工作空间的模型
set I:= {1,2,3,4,5,6};
def f(x) := x in I;
check f(1);
check f(2);
check not f(10);
clear model; # 清空MAPL工作空间的模型
param flow = (1,2) 1, (2,2) 2;
set edge = {(1,2), (2,2)};
def f(x) = sum{(o,x) in edge} : flow[o,x];
check f(2) == 3;
clear model; # 清空MAPL工作空间的模型
set I := 1 .. 5;
set J := 1 .. 3;
var x[I*J] >= 0;
def dist(a,b) := a*a + b*b;
subto c2: sum {(i,j) in I*J } dist(i,j) * x[i,j] >= 0;
clear model; # 清空MAPL工作空间的模型
param a := 5;
var b >= 0 <= 1;
def sum1(x) := sum{i in 1..x} i;
minimize obj: (sum1(a)) * b ;
clear model; # 清空MAPL工作空间的模型
set K = 3 .. 7;
var y[K] >= 0;
def goodone(a,b) := a > b;
def bigger(i) := {j in K with goodone(j,i)};
subto c3: sum {i in bigger(5)} : y[i] >= 0;
clear model; # 清空MAPL工作空间的模型
set M = 1..9;
set N = 1..9;
var x[M*N];
def ack(i,j) :=
if i == 0 then j + 1
else if j == 0 then ack(i - 1, 1)
else ack(i - 1, ack(i, j - 1))
end
end;
subto c0: ack(3,3) * x[ack(1,3),ack(2,2)] >= 0;
使用def关键字自定义小函数,可以在模型中重复的使用一些复杂的计算或者逻辑,这样不仅可以有效提高模型构建的效率,还使得模型更易于阅读和维护。通过自定义小函数,模型可以在确保相同逻辑性的同时,变得更加灵活