【问题标题】:Is it possible reduce time of building a mathematical formulate in coding?是否可以减少在编码中建立数学公式的时间?
【发布时间】:2022-08-18 17:50:53
【问题描述】:

我想在代码中使用优化模型。但是目标函数(f)的处理和准备时间太长。有什么办法可以减少这类大型模型的时间吗?

using JuMP,CPLEX
Tsp=Model(solver=CplexSolver());

#Parameters-----------------------------------------------------------------
V, H, K = 1:100, 1:5, 1:5
totalV=100
d=1 .+ 99 .*rand(V,V);
#variables---------------------------------------------------------------------
@variable(Tsp,x[V,V,K,T],Bin);

@variable(Tsp,u[V,V,K,T]>=0);
#constrains---------------------------------------------------------------------
@constraint(Tsp,c1[i in V, k in K,t in T ], sum(x[i,j,k,t] for j in V )==1);

@constraint(Tsp,c2[j in V, k in K,t in T], sum(x[i,j,k,t] for i in V )==1);

@constraint(Tsp,c3[i in U,j in V,k in K, t in T; i!=j],u[i,k,t]-u[j,k,t]+totalV*x[i,j,k,t]<=totalV-1);
# objective function---------------------------------------------------------
f=sum(d[i,j]*x[i,j,k,t] for i in V,j in V, k in K, t in T);

@objective(Tsp, Min, f);

solve(Tsp);

非常感谢。

    标签: julia julia-jump


    【解决方案1】:

    由于标签,我假设您正在使用 JuMP。

    1. 始终提供可重现的示例:https://stackoverflow.com/help/minimal-reproducible-example。没有它就很难提供建议。
    2. 不要在宏之外构建 JuMP 表达式:https://jump.dev/JuMP.jl/stable/tutorials/getting_started/performance_tips/#Use-macros-to-build-expressions
    3. 您的代码错误。如果V = 100,那么for i in V 将只有一个元素,那就是i = 100。也许你的意思是for i in 1:V
    4. 想想if 语句在做什么。它仅使用ij,但需要对每个t 和每个k 进行评估。

      把它们放在一起,我会做这样的事情:

      V, H, K = 1:100, 1:5, 1:5
      using JuMP
      model = Model()
      @variable(model, x[V, V, K, H])
      d = 1 .+ 99 .* rand(V, V)
      @expression(
          model, 
          f, 
          sum(d[i, j] * sum(x[i,j,k,t] for t in H, k in K) for for i in V, j in V if i!=j)
      )
      

      希望有帮助。

    【讨论】:

    • 我真的很感激,
    • 亲爱的道森教授,我修改了文件。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    相关资源
    最近更新 更多