我在网上看到,人们可以将旅行商问题写成线性表达式,并使用CPLEX for java等软件进行计算.
我有1000个城镇,需要找一小段距离.我计划将这1000个城镇划分为约100个城镇的集群,并在这些单独的集群上执行一些线性规划算法.
我的问题是,我究竟如何将其表示为线性表达式.
所以我有100个城镇,我相信每个人都知道TSP是如何工作的.
我完全不知道如何编写满足TSP的线性约束,目标和变量.
有人可以向我解释这是如何完成的,或者给我一个清楚解释它的链接,因为我一直在研究很多,似乎找不到任何东西.
编辑:
我找到了一些额外的信息:
我们用数字0到n标记城市并定义矩阵:

这会为5个城镇产生以下矩阵吗?

限制是:
i)每个城市都来自其他城市
ii)从每个城市出发前往另一个城市
iii)该路线不会分成不同的岛屿.
同样,这对我来说是完全合理的,但我仍然无法将这些约束写为线性表达式.显然它是一个简单的矩阵.
谢谢你的帮助 !
algorithm linear-algebra linear-programming traveling-salesman cplex
我正在使用CPLEX Java API解决大型优化问题.目前我只是
IloCplex cplex = new IloCplex();
... add lots of variables and constraints ...
cplex.solve();
cplex.end();
Run Code Online (Sandbox Code Playgroud)
这很有效,但我经常重复这个过程,我只是改变了系数.每次重复我创建一个新cplex对象并重新创建所有变量.
有没有更有效的方法来做到这一点?IBM文档的语言类似于"将模型添加到模型实例中",这听起来很奇怪,但我认为它暗示能够重用事物.
来自更有经验的用户的任何建议都会很棒.谢谢.
java mathematical-optimization linear-programming cplex ilog
我正在尝试开始使用YALMIP,它是优化求解器(如CPLEX)的 Matlab 接口。我有一个目标函数obj和约束cons,我已经将它们插入 Yalmip ......
options=sdpsettings('solver','Cplex'); %windows needs uppercase 'Cplex' and unix is ok with 'cplex' or 'Cplex'
solvesdp(cons,obj,options); %prints 'Warning: Solver not found'
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,solvesdp打印Warning: Solver not found。该.m含obj,cons以及对Yalmip呼叫工作我朋友的电脑上,我们正在难倒,为什么它不工作在我的电脑上。
以下是我在使用Matlab R2012b 的Ubuntu 12.04机器上执行的 CPLEX 和 Yalmip 设置步骤:
/home/user/ibm/ILOG/CPLEX_Studio125/cplexhome/user/yalmip
addpath(genpath('/home/user/yalmip'))
addpath(genpath('/home/user/ibm/ILOG/CPLEX_Studio125/cplex/matlab'))
addpath(genpath('/home/user/ibm/ILOG/CPLEX_Studio125/cplex/examples/src/matlab'))
Run Code Online (Sandbox Code Playgroud)
下面,我将解释我如何尝试诊断问题。很明显,Matlab 可以看到 CPLEX,Matlab 可以看到 …
ubuntu matlab mathematical-optimization linear-programming cplex
这个问题已经在OR交换中进行了彻底的讨论和更新,我在其中交叉了它.
当我从命令行运行CPLEX 12.5.0.0时:
cplex -f my_instance.lp
Run Code Online (Sandbox Code Playgroud)
最佳整数解在19056.99滴答中找到.
但是通过Python API,在同一个实例上:
import cplex
problem = cplex.Cplex("my_instance.lp")
problem.solve()
Run Code Online (Sandbox Code Playgroud)
现在所需的时间为97407.10蜱(慢5倍以上).
在这两种情况下,模式都是并行的,确定性的,最多2个线程.想知道这个糟糕的性能是由于一些Python线程开销,我试过:
problem = cplex.Cplex("my_instance.lp")
problem.parameters.threads.set(1)
problem.solve()
Run Code Online (Sandbox Code Playgroud)
需要46513.04个刻度(即,使用一个核心比使用两个核心快两倍!).
作为CPLEX和LP的新手,我发现这些结果非常令人困惑.有没有办法提高Python API性能,还是应该切换到更成熟的API(即Java或C++)?
以下是2线程分辨率的完整细节,首先是(常见)前言:
Tried aggregator 3 times.
MIP Presolve eliminated 2648 rows and 612 columns.
MIP Presolve modified 62 coefficients.
Aggregator did 13 substitutions.
Reduced MIP has 4229 rows, 1078 columns, and 13150 nonzeros.
Reduced MIP has 1071 binaries, 0 generals, 0 SOSs, and 0 indicators.
Presolve time = 0.06 sec. (18.79 …Run Code Online (Sandbox Code Playgroud) 我试图在Ubuntu 12.04中的eclipse中使用cplex但是当我包含ilocplex.h时我收到以下错误
/opt/ibm/ILOG/CPLEX_Studio124/concert/include/ilconcert/ilosys.h:360:22: fatal error: iostream.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)
仅有的两个包括如下:
#include <ilcplex/ilocplex.h>
#include <iostream>
Run Code Online (Sandbox Code Playgroud)
如果有人能帮助我,我将不胜感激.
我正在使用 CPLEX python API 来解决优化问题。该模型被命名为 DOT。当我运行 DOT.solve() 时,python 控制台中会出现许多信息:
Iteration log ...
...
Network - Optimal: Objective = 1.6997945303e+01
Network time = 0.48 sec. (91.93 ticks) Iterations = 50424 (8674)
...
Run Code Online (Sandbox Code Playgroud)
我的问题是有没有一种简单的方法来获取经过时间的值(即我的情况为 0.48)?不仅适用于网络优化器,也适用于对偶方法、屏障方法。
我对 python 和 CPLEX 非常陌生,非常感谢您的帮助。
我正在寻找一种在R中进行非负分位数和Huber回归的快速方法(即约束所有系数都> 0).我尝试使用CVXR包进行分位数和Huber回归以及quantreg用于分位数回归的包,但是当我使用非负性约束时,CVXR它非常慢并且quantreg看起来很麻烦.有人知道R中的一个好的和快速的解决方案,例如使用Rcplex包或R gurobi API,从而使用更快的CPLEX或gurobi优化器?
请注意,我需要运行一个大小低于80 000次的问题大小,我只需要y在每次迭代中更新向量,但仍然使用相同的预测矩阵X.从这个意义上讲,我认为CVXR现在我必须obj <- sum(quant_loss(y - X %*% beta, tau=0.01)); prob <- Problem(Minimize(obj), constraints = list(beta >= 0))在每次迭代中做到这一点是低效的,当问题实际上保持不变并且我想要更新的时候y.有没有想过要做得更好/更快?
最小的例子:
## Generate problem data
n <- 7 # n predictor vars
m <- 518 # n cases
set.seed(1289)
beta_true <- 5 * matrix(stats::rnorm(n), nrow = n)+20
X <- matrix(stats::rnorm(m * n), nrow = m, ncol = …Run Code Online (Sandbox Code Playgroud) Docplex 和 CPLEX Python API 之间有什么区别?他们中的任何一个比另一个更快吗?
我在 Ubuntu 计算机上安装了CPLEX Optimization Studiodocplex ,并且正在成功使用模型模块。现在我必须使用CpoModel并docplex.cp.model出现错误:
CpoException:无法执行命令“cpoptimizer -angel”。请检查所需可执行文件的可用性。
我不知道发生了什么事。我无法获得IBM的支持,因为我有学生许可证。
我正在将以前在 IBM 的 DoCloud 上运行的应用程序迁移到基于 Watson 的新 API。由于我们的应用程序没有 CSV 格式的数据,也没有模型层和数据层之间的分离,上传一个 LP 文件和一个读取 LP 文件并解决它的模型文件似乎更简单。我可以上传并且它声称可以正确解决但返回空的解决状态。我还输出了各种模型信息(例如变量的数量),并且一切都归零了。我已经确认 LP 不是空白的 - 它有一个微不足道的 MILP。
这是我的模型代码(其中大部分直接取自https://dataplatform.cloud.ibm.com/exchange/public/entry/view/50fa9246181026cd7ae2a5bc7e4ac7bd 上的示例):
import os
import sys
from os.path import splitext
import pandas
from docplex.mp.model_reader import ModelReader
from docplex.util.environment import get_environment
from six import iteritems
def loadModelFiles():
"""Load the input CSVs and extract the model and param data from it
"""
env = get_environment()
inputModel = params = None
modelReader = ModelReader()
for inputName in [f for f in os.listdir('.') …Run Code Online (Sandbox Code Playgroud) cplex ×10
docplex ×3
python ×3
algorithm ×1
c++ ×1
cp-optimizer ×1
cvx ×1
cvxr ×1
eclipse ×1
ibm-cloud ×1
ilog ×1
java ×1
matlab ×1
optimization ×1
performance ×1
python-3.x ×1
r ×1
ubuntu ×1
ubuntu-12.04 ×1