运筹学
文章平均质量分 63
Gavin在努力
这个作者很懒,什么都没留下…
展开
-
非线性转线性集合
在构建模型时,一不小心就会构建成非线性问题(谁叫非线性容易理解呢)。但是,非线性不好求解,因此,总会想方设法将非线性转换为线性。某些非线性可以转换为线性,有些则不可以。网络上的资料,质量层次不齐,真真假假。为了方便自己后续查找,本文将遇到的非线性转换为线性的方法,集合于此。原创 2021-04-23 11:30:04 · 4164 阅读 · 0 评论 -
Python+Gurobi
想要通过python调用gurobi求解整数规划模型。如果你和我一样,提前下载了anaconda和gurobi。在下载好anaconda和gurobi后,尝试运行后发现系统报错:找不到对应模块。ImportError: DLL load failed while importing gurobipy: 找不到指定的模块参考https://zhuanlan.zhihu.com/p/29165673得以解决其中,anaconda的安装位置查找:开始——Anacoda Prompt——输入命.原创 2020-11-23 11:07:53 · 4966 阅读 · 0 评论 -
浅析constraint generation(约束生成,行生成)和column generation(列生成)
这篇博文主要是想记录一下我这几天的工作心得。鉴于网上关于constraint generation和column generation的中文资料相对较少,希望这篇博文也能帮助像我一样的新学者。首先,是我对constraint generation的理解。标题中的约束生成或者行生成是我自己翻译的,可能存在误差(单纯形法中用一行表示一个约束)。前人提出这个算法的主要原因是因为有的问题约束特别多,例...原创 2019-07-22 21:08:50 · 7839 阅读 · 2 评论 -
Java调用CPLEX解决TSP问题(基于constraint generation模型)
constraint generation 约束生成方法(不知道我翻译得对不对)在网上资料相对较少,中文的资料更少。因为传统的DFJ模型解决TSP问题需要求解指数级别的子集,因此constraint generation显得十分必要(就目前而言,120个节点的TSP也是分分钟解决)。下面是基于constraint generation的代码。值得注意的是在运行constraint gene...原创 2019-07-11 17:25:00 · 2958 阅读 · 1 评论 -
Java调用CPLEX解决TSP问题(基于DFJ模型)
DFJ模型易于理解,可拓展性强,但纯DFJ模型需要一次性求解节点的所有子集,需要用到回溯法,相对效率较低。当节点为n时,所需的子集合规模达2^n-2n-2个,具有指数级别复杂度。当节点个数为101个时,基本卡着不动了。下面是Java调用CPLEX解决TSP问题的DFJ模型。这里较为精巧的是递归求解子集,在我另一篇博文中有所介绍,此处不再细解。博文链接如下:https://blog.csdn.n...原创 2019-07-11 17:19:03 · 2121 阅读 · 1 评论 -
Java调用CPLEX解决TSP问题(基于MTZ模型)
MTZ模型理解简单,编码简单,但是对于解决规模较大的问题复杂度较大。我在计算TSP问题时,101个点大概需要15分钟,120个点大概需要2个小时,再往上就没有试过了。现把对应代码存档于此。值得注意的是约束3中ui和uj不能只添加一个。import java.io.BufferedReader;import java.io.File;import java.io.FileInputSt...原创 2019-07-11 17:11:01 · 2095 阅读 · 1 评论 -
递归求解一个集合的所有子集(TSP的DFJ模型)
在求解TSP时,DFJ模型需要求得节点的所有大于等于2小于等于n-2的子集。若TSP有5个节点,分别为1,2,3,4,5 则它对应的需要求解的子集为{1,2}{1,3}{1,4}{1,5}{2,3}{2,4}{2,5}{3,4}{3,5}{4,5}{1,2,3}{1,2,4}{1,2,5}{1,3,4}{1,3,5}{1,4,5}{2,3,4}{2,3,5}{2,4,5}{3,4,5}一共有2^n...原创 2019-07-11 17:04:10 · 1497 阅读 · 0 评论 -
旅行商问题(TSP)的两种模型
TSP简介一个商人从一点出发,经过所有点后返回原点。它需要满足:除起点和终点外,所有点当且仅当经过一次;起点与终点重合;所有点构成一个连通图。要求:得到这个商人经过所有点的最短路程。TSP模型表示设x[i][j]是一个0-1变量,其中1表示点i与点j之间有连边,0表示这两点之间无连边,值得注意的是:x[i][j]不一定等于x[j][i]。设c[i][j]表示点i到点j的距离,同理,...原创 2019-06-23 21:12:14 · 44762 阅读 · 10 评论 -
ILOG CPLEX Optimization Studio 编写 TSP问题 (2)
基于子集的求解方式详见我的另一篇博文:https://blog.csdn.net/u011561033/article/details/93380842由于子集S在程序中不好表示,并且随着TSP模型增大,S的规模呈指数级上升,因此,本博文主要讲述另一种TSP模型(可能叫做位势法)。具体详见.mod部分代码(.dat和最终结果与基于子集求解TSP的博文中内容一致,因此此处不再重复赘述,详见最开始...原创 2019-06-23 21:10:00 · 4203 阅读 · 23 评论 -
ILOG CPLEX Optimization Studio 编写 TSP问题
网上关于IBM的ILOG CPLEX Optimization Studio的使用非常少,给自己的编程带来了不少的麻烦。下面是我用OPL编程语言编写的第一个TSP程序。以TSPlib中gr17.tsp为例。TSP问题中子集的表示比较麻烦,下面nodes2相关的代码段就是用来处理这个子集的。下面的代码第一部分是.mod文件,第二部分是.dat文件。该例子中输出结果是 2085,运行完总用时35秒,具...原创 2019-06-23 14:25:45 · 7006 阅读 · 18 评论 -
CPLEX运行出错-OPL标记问题
问题描述:前面的乱码看不懂,大概意思是找不到对应的路径。开始我以为是路径中包含中文的关系,我新建了项目,把路径都设置成了英文,但还是出现这个问题。原因出在项目中“运行配置”文件夹下的文件是中文的原因。就是下图框出来的地方。把它改成英文后,该问题就解决了。修改方法为:右键这个“配置1(缺省值)”,重命名,修改英文名后右键运行。最终的结果在“解”这个对话框中。就因为这小小的重命名,...原创 2019-06-21 20:30:00 · 12815 阅读 · 28 评论