将非线性目标函数转换为线性目标函数

时间:2017-04-24 14:44:34

标签: gams-math

目前,我正在使用GAMS解算器来最大化目标函数(最大化总平均容量利用率),如下所示:

objFunction .. G = E = sum((i,j),X(i,j)/ caprepaircenter(j))/ sum(j,Z(j));

在objFunction中;

  • X(i,j)给出从收集中心i到维修中心j的返回量 (X(i,j)> = 0),
  • caprepaircenter(j)给出每个维修中心j的容量,
  • Z(j)给出修理中心j的建立决定(二元决策变量/如果修理中心j打开则Z(j)= 1,否则Z(j)= 0)。

但是,我想在GAMS代码中使用线性目标函数而不是非线性目标函数。那么,我怎样才能将非线性目标函数(如上所述)转换为线性?

3 个答案:

答案 0 :(得分:0)

如果X(i,j),caprepaircenter(j)和Z(j)都是变量,那么恐怕没有办法将目标函数转换为线性函数。

答案 1 :(得分:0)

实际上,X(i,j)和Z(j)是变量,而caprepaircenter(j)是参数。在这种情况下,有没有办法将这个非线性函数转换为线性函数?

答案 2 :(得分:0)

等式

G =E= sum((i,j), X(i,j)/caprepaircenter(j)) / sum(j, Z(j))

可以写成

sum(j, G*Z(j)) =E= sum((i,j), X(i,j)/caprepaircenter(j)) 

这又可以写成:

sum(j, y(j)) =E= sum((i,j), X(i,j)/caprepaircenter(j)) 
y(j) = G*Z(j)

产品y(j) = G*Z(j)continuous variable * binary variable。这可以线性化,如here所示。

Here是一个类似的模型,应用了这个技巧。