我正在尝试在cplex代码中实现非线性约束:
forall (j in agent)
pu[j] == pow(W[j],K)*pow(u[j],-K);其中pu和u是float+决策向量变量,W是参数向量,K是常数。如何将约束转换为线性约束?
下面是代码的其余部分:
int N =3;
range task = 1..N;
range agent = 1..N;
dvar boolean x[task][agent];
dvar float+ u[agent];
dvar float+ pu[agent];
int B[agent] = [9,7,4];
int W[agent] = [2,5,4];
int V[agent] = [1,6,4];
int P[task] = [5,2,1];
int K = 3;
float UV = 10;
dexpr float z = sum(i in task, j in agent) (P[i]*(B[j]+ pu[j]) )*x[i,j];
minimize z;
subject to {
forall (j in agent)
pu[j] == pow(W[j],K)*pow(u[j],-K);
forall (i in task)
sum(j in agent) x[i,j]==1;
forall ( j in agent)
sum(i in task) x[i,j]==1;
sum(j in agent) V[j]*u[j]<= UV;
} 发布于 2021-04-18 01:26:28
您可以在CPLEX中使用CPOptimizer并编写
using CP;
int N =3;
range task = 1..N;
range agent = 1..N;
dvar boolean x[task][agent];
int scale=100000;
dvar int+ scaleu[agent];
dexpr float u[j in agent]=scaleu[j]/scale;
int B[agent] = [9,7,4];
int W[agent] = [2,5,4];
int V[agent] = [1,6,4];
int P[task] = [5,2,1];
int K = 3;
float UV = 10;
dexpr float pu[j in agent]=pow(W[j],K)*pow(u[j],-K);;
dexpr float z = sum(i in task, j in agent) (P[i]*(B[j]+ pu[j]) )*x[i,j];
minimize z;
subject to {
//forall (j in agent) pu[j] == pow(W[j],K)*pow(u[j],-K);
forall (i in task) sum(j in agent) x[i,j]==1;
forall ( j in agent) sum(i in task) x[i,j]==1;
sum(j in agent) V[j]*u[j]<= UV;
}哪个行得通?
https://stackoverflow.com/questions/67139012
复制相似问题