首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复杂系统中的功率非线性约束

复杂系统中的功率非线性约束
EN

Stack Overflow用户
提问于 2021-04-17 22:03:47
回答 1查看 38关注 0票数 1

我正在尝试在cplex代码中实现非线性约束:

代码语言:javascript
复制
forall (j in agent)
    pu[j] == pow(W[j],K)*pow(u[j],-K);

其中pu和u是float+决策向量变量,W是参数向量,K是常数。如何将约束转换为线性约束?

下面是代码的其余部分:

代码语言:javascript
复制
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;
    
}  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-18 01:26:28

您可以在CPLEX中使用CPOptimizer并编写

代码语言:javascript
复制
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;

}

哪个行得通?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67139012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档