学习思考总结
文章平均质量分 63
学习过程中的阶段小结、思考和总结
云湖在成长
1.不怕慢,不怕笨,就怕停。
日拱一卒,天道酬勤,每天一小步。
2.不和别人比,目标是打好手中的牌。
3.目标导向,少玻璃心。
展开
-
数据实验部分结果展示的角度
(2)算法各阶段去掉后的结果对比,如原算法包含ABC三个模块,对比的维度可以是A,A+B,A+C,A+B+C。以此来表示各模块的必要性。在论文的结果展示部分,需要多维度地展示本文的工作(丰富内容)。(1)不同的算例规模,比如n*m的不同规模,汇总同一n不同m,同一m不同n。(3)多目标优化中衡量解维度的指标,如DI_R和ρ_L。(1)找到最优解算例个数(未找到最优解的算例个数)(3)灵敏度分析中,不同参数的差异对比。(3)gap值,可行解与松弛解的差距。(1)均值,最大值,最小值。(2)多目标的不同结果。原创 2024-04-24 17:28:47 · 140 阅读 · 0 评论 -
逻辑benders分解
benders分解是指把问题分解为主问题和子问题。主问题松弛后得到的信息输入到子问题中,求解中去。加入的割可以提升主问题的下界(主问题提供的解),继续反馈给子问题后,降低了上界(子问题提供的解),直到上下界相等,求解完成。经典的benders分解,指的是子问题是线性规划问题;基于整数的benders分解,指的是子问题是整数规划;而基于逻辑的benders分解,指的是子问题返给主问题的割是根据逻辑得到的割。对于调度问题,通常有以下几种。原创 2024-04-12 21:00:59 · 956 阅读 · 2 评论 -
gurobi求解过程中修改参数是不起作用的
我做了一个试验,批量求解模型。在求解模型时,改变某一参数取值,发现后续模型求解时用的还是之前设定的参数。也就是说,参数没修改过来,还用的是老参数。3.设置参数(参数设置方法,以及参数取值,意义可以去翻gurobi官方指导手册refman.pdf,写得非常详细);4.构建变量,约束,求解。原创 2024-03-05 16:25:23 · 281 阅读 · 0 评论 -
正交试验DOE
举个例子,比如遗传算法中的种群数pop,交叉概率pr,变异概率pm,以及迭代次数N,每个参数我们初始定为3个值,那么想要确定最优的参数组合需要设计3^4=81次试验,才能确定下来。这样的试验规模太大了,采用正交试验的方法只需要进行L27=L3^4(3水平4因子),27次试验就可以确定出最优的参数组合。一开始举的例子中,因子数是4个,分别是pop,pr,pm,以及N。如,下面这张图,可以确定最终的参数组合取值,N为第3水平,R为第三水平,Limit为第三水平,β1&β2&γ都为第三水平。原创 2023-11-13 14:43:01 · 794 阅读 · 0 评论 -
优化模型的关键:ARR
Principle ARR – Shu-Cherng Fang• Approximation – “accept good-enough” to make problem easy• Reformulation – “change view” to make the problem clear and simple• Relaxation – “drop difficulties” to get a bound of the problem• Decomposition – “reduce dime原创 2023-11-02 11:16:49 · 156 阅读 · 0 评论 -
求解器求解过程中gap没有太大变化怎么办?
探测节点很快,节点所在的支被切掉(整数解,更差的非整数解,或不可行三种情形之一),此时求解会很快,反应在求解器的输出日志上就是,需要备探测的节点在减少。求解器用的是分支定界框架,准确的说用的是分支切割算法,在分支定界的框架中不断自动添加各种割cut,直到“所有”节点探测完毕。从公式上可以看出,当gap下降很快,要么是上界在降低(更好的整数解),要么是下界在提升(更好的下界)。gap下降很快,这种情况要么是找到了更好的上界,更小的整数解(最小化问题),要么是更好的下界,gap体现了目前求解的状态,直观的说,原创 2023-10-26 10:34:29 · 848 阅读 · 0 评论 -
完成比写得好更重要,先完成初稿再说
记得当时捧着python大厚本学习,看得云里雾里,不成体系,后面工作了开始上手就慢慢学会了;latex也是一样,捧着大厚书一页页看很低效甚至没用,不如去排版,给论文排过几次版,大多数功能就会了。于是,经常做到一半跑去看文献,然后陷入文献中觉得这个比自己好,那个比自己好。于是,暂时中断手边工作,最后进度被推迟,甚至啥也没做出来。初稿非常重要,在写初稿的时候不要去考虑表达,不要去考虑语法,不要给自己使绊子。只去写,一直写,一直写就好。这是第一念,只要上手,就会慢慢拓展,自行获取知识,且这是主动的过程。原创 2023-10-25 22:11:56 · 257 阅读 · 0 评论 -
设计分支定界算法关键步骤
性质是最优解中会出现的性质,那么没有出现这些性质的,不会是最优解(或者说别的解已经包含这些特征了,这个点是无用的),我们说这个点被支配,会进行砍枝操作。在研究的过程中,需要根据问题属性设计出节点的下界。对于调度问题来说,就是部分调度PS下最好的解是多少,即LB。这两点是我们设计出定制的分支定界算法的核心,是我们的工作量体现,更是影响算法表现效果的关键。推导出下界,最好是比较紧的下界,对于后续分支树有巨大好处。不同于经典分支定界的线性松弛法,即线性松弛解为下界。原创 2023-10-10 16:09:04 · 162 阅读 · 0 评论 -
支配规则的作用及应用——以分支定界和有效不等式为例
支配规则的作用是删去一系列被支配的节点,也就是我们说的剪支。大白话理解就是这个节点的信息太差,有比它更好的,已经包含了相应的信息,所以它没什么作用了,这样一来,剪支后的分支树叶子节点变少,我们探索就容易了。线性松弛的解大于等于UB,该枝不可能产生更好的整数解了,因为该枝的整数解比线性松弛的解还大,得到的整数解不会更新UB。对更新UB无用,所以剪支。支配规则需要我们来进行推导,也是体现我们工作量创新点,以及体现我们对问题的理解,定制化算法的关键。πx≤π0,证明左边的π更大,或者是右边的π0更小。原创 2023-10-10 11:27:21 · 158 阅读 · 0 评论 -
Gurobi设置初始可行解
我们可以要么改写模型,写一个更紧一点的模型,本质是探测节点找到可行解。但也可以通过启发式算法传入可行解。原创 2023-10-04 12:11:22 · 1413 阅读 · 0 评论 -
优化思考二
(2)启发式算法也挺重要的,但是怎么选择表现好的,是个问题;而且我们不是纯计算机出身,怎么发挥长处需要多想想;(1)建模很重要,建模是把现实问题抽象为数学模型的能力,是业务到算法的摆渡车,依旧重要,是核心竞争力。,这是学术喜欢用的一条路,因为好复现,又是精确解不容置疑,又体现了学术能力,也可以多学学。(2)建的模型有好坏之分,怎么建立更紧的更好的模型,是很重要的。(3)求解器不是黑箱,可以定制一些cut,优化是其中最重要的一环。翻到了两年前写文章,有了不一样的观点。,才能建好模型,表征模型;原创 2023-10-03 21:08:57 · 148 阅读 · 0 评论 -
分支定界、分支切割、分支定价的区别
(1)分支定界:是(本质上(2)分支切割:是。比如VRP问题中的k-paths割,即若干顾客的需求量至少需要的车辆数。(3)分支定价:将原问题重写,如VRP问题中将x_{ijk}的3-index模型改写为路径y_{r}的1-index模型(RMP);然后根据子问题的检验数不断添加新的路径,再次求解RMP,若是非整数解则分支。需要改写模型;而且需要求解子问题(设计出有效的算法,比如标签算法,支配规则等)。别的与前两者区别不大。原创 2023-10-03 16:48:20 · 1526 阅读 · 0 评论 -
MIP精确算法的关键——确定界
MIP精确算法包含,分支定界、分支切割、分支定价还有benders分解等等。前者是以分支定界为框架的一类算法;后者是以分解为框架的一类算法。甚至还包括拉格朗日松弛等等,我觉得除了算法细则需要搞清楚外,更关键的是弄懂界。因为拉格朗日算法目前不熟,所以下面我具体总结分支定界的一类算法和benders分解算法界的确定原则。本篇以min问题为例。原创 2023-10-03 11:46:43 · 398 阅读 · 2 评论 -
gurobi属性:构造目标函数,构造列
但如果是x=m.addVar(lb=0, float(’inf’), obj=2, vtype=GRB.CONTINUOUS),那么目标函数中会出现z=2x一项。我们常见的目标函数写法通常是定义好式子z=f(x,y,...),然后用m.setObjective(z, GRB。如果obj=0,即该变量不出现在目标函数中,也是默认的形式,我们见得最多。添加的时候用addTerm(),删除的时候用remove()。(2)但还有一种写法,是在定义变量的时候来构造目标函数。此处的obj是变量在目标函数中的系数。原创 2023-10-01 17:50:01 · 404 阅读 · 0 评论 -
拉格朗日松弛与拉格朗日分解 lagrangian relaxation
拉格朗日松弛 lagrangian relaxation首先介绍下拉格朗日松弛的出发点,以及该方法所属的门类;再介绍下拉格朗日松弛法需要处理的难点和注意事项。原创 2023-05-27 20:59:39 · 3744 阅读 · 0 评论 -
benders分解算法 逻辑思路整理(加星)
一般我们经常可以看到的是经典的benders,此处我也结合经典的benders梳理下思路。原创 2023-05-25 12:40:11 · 3716 阅读 · 2 评论 -
latex投稿出错,可以把latex文件当成补充材料上传
(注意不是latex补充材料,是普通的补充材料)上传,此时系统不会自动编译。——这是没办法的办法,是最后一种办法。LaTex中常见的文件格式有.tex, .bib, .cls, .sty, .bbl等,我们一般是直接上传latex,cls,bib,eps等。但有的时候,期刊系统编译会出问题,你打开pdf确认的时候发现是乱码的。是使用bibligraphy方式导入参考文献时,写参考文献的文档,这个时候可以把latex,cls,bib,eps当做。是包文件,通常使用\usepackage导入,原创 2023-04-27 14:41:50 · 1596 阅读 · 0 评论 -
latex数字引用参考文献
与一种正文引用对应,若是采用姓名(年份)的样式,后面参考文献是按照首字母排的,直接参考文献编译,就可以了。(3)用记事本打开bbl文档,复制里头的东西,粘贴到latex文末,然后参考文献编译,全文编译即可。latex在正文中引用参考文献可以分为两种样式,一种是“姓名(年份)”,另一种是“[1]”。在文档最末引用参考文献的地方加上下述代码,即文末按照数字从小到大显示。latex引用参考文献,分为正文里,和文末显示参考文献两部分。这个比较简单,关键的是文末显示,只有文末正常了,正文才能正常。原创 2023-04-26 21:02:26 · 5421 阅读 · 0 评论 -
Gurobi 不可行问题的冲突溯源
如果是无界的,那么可以检查变量和约束的上下界设置,是否有可能出现无界情况。feasRelaxS() 和 feasRelax() 函数的功能,是在用户原有模型基础上,为变量和约束添加松弛变量,让松弛模型变得可行,然后通过最小化松弛量来获得一个最小违反变量和约束限制的模型。这种情况下,用户可以将原模型中的变量边界和约束的 Force 属性设定为1,然后运行ComputeIIS(),那么Gurobi 只会专注在新增加的约束和变量边界上,不但溯源的时间会更短,而且提供的信息可以更容易让用户发现问题。转载 2023-04-06 16:39:50 · 1642 阅读 · 0 评论 -
gurobi松弛模型求解
如原来的MIP模型为model,则松弛后的求解方式可以为下述:原创 2023-03-19 16:07:32 · 525 阅读 · 2 评论 -
有效不等式valid inequality和割平面cuts的区别,以及与强有效不等式的区别
一般来讲,valid inequality在模型未求解之前,就可以全部列举出来;而cuts,一般是模型求解过程中,随着迭代,才可以生成的。(我自己使用的感觉是,添加了有效不等式,与不加有效不等式相比,一开始的效果会非常明显。但是之后进程提升的效果并不明显。有效不等式valid inequality和割平面cuts是不同的两个东西。但是cuts会在之后的进程中起到作用,一点点切割可行域。个人感觉是两者都需要,关键在于对问题本身的了解和研究。但是其实,这两者的概念,也没有说分得那么清楚。原创 2023-04-06 16:50:43 · 1400 阅读 · 0 评论 -
gurobi中callback函数的使用整理
但其实不是的。model.optimize()的完整形式是model.optimize(callback=none),既我们没有赋予括号中任何信息。但其实callback功能十分强大,在后期实现分支定价,分支切割算法的时候经常用。callback可以实现监视,干预,也就是部分程度和gurobi求解器实现交流交互,管理gurobi的优化进程。更多callback的分析可以看gurobi自带的参考资料,即refman.pdf文件。原创 2023-01-08 11:01:44 · 3066 阅读 · 2 评论 -
分支定界方法(branch and cut,branch and price的基础)
运筹我们最先接触分支定界算法,也就是由Land Doig和Dakin在20实世纪60年代初提出的branch and bound算法,用在整数规划(全部决策变量是整数)中。其实用在混合整数规划(部分决策变量是整数)中也是可以的(本身混合整数规划就能够转化为整数规划)。目前很多求解器,如cplex和gurobi就是基于分支定界算法框架设计的。1.基础版的分支定界算法(假设是min问题)首先介绍几个定理:(1)若上界和下界相等,且上界是整数可行解,那么上界对应的可行解就是最优解。备注:假如上原创 2021-10-18 10:35:48 · 16043 阅读 · 2 评论 -
VRP和调度问题的主流精确算法和启发式算法
也就是说解决大规模问题,现在的主流的精确算法是BCP,与之比较的是ALNS,自适应大邻域搜索(别的什么遗传算法,粒子群等等,根本不能与之比)。BCP和ALNS的特点是用局部搜索来逼近全局搜索最优点。换句话说,开发大规模的精确算法,可以与之一比的是ALNS,别的启发式算法不要比原创 2022-11-26 17:10:47 · 2370 阅读 · 1 评论 -
从 Yalmip 中输出Gurobi 识别的 LP/MPS 文件
通过 Yalmip 调用 Gurobi 时原创 2022-10-29 20:14:59 · 1659 阅读 · 0 评论 -
python安装包方式汇总
python安装包方式汇总原创 2022-09-20 20:28:12 · 9856 阅读 · 0 评论 -
Opt算法:2-opt,3-opt,Or-opt,k-opt
Opt是局部搜索local search的方法,而局部搜索算法是在一组可行解的基础上,在当前解的领域内进行局部搜索产生新的可行解的过程。用在TSP和VRP问题中比较多。常见的有2-opt,3-opt,Or-opt,k-opt算法。可以分为2-opt&k-opt、Or-opt、3-opt三类。其中,2-opt是最基本的,用得也最多。K-opt是建立在2-opt基础上的。Or-opt是Or1976年博士论文设计的opt。而3-opt也是比较常见和常用的opt算法。原创 2022-09-18 17:41:56 · 9563 阅读 · 0 评论 -
pycharm创建虚拟环境
虚拟环境的目的是同时拥有多个python版本,不必要来回下载。只需要切换到合适的版本就可以了。转载 2022-08-26 09:18:14 · 504 阅读 · 0 评论 -
列生成算法column generation求解思路总结篇2——CW分解
CW分解是类似的思路,也是让子问题不断生成新列添加到松弛主问题中,让松弛的主问题不断逼近一开始的原问题,直到不能改进时,可以认为松弛的主问题等价于原始问题了。原创 2022-07-23 16:05:46 · 1267 阅读 · 0 评论 -
元启发式算法(智能算法)的思考
启发式算法一般是指“基于规则”的方法,能够直接给出一个解。我们平时说的【智能算法】有的人也叫它启发式算法,其实不太对;或者说为了与前一种区分,通常叫做“元”启发式算法,meta-heuristics。这种通常是改进型算法,也就是通过种群或者邻域不断迭代予以改进。像邻域搜索,蚁群,蜂群等等都属于这一类。......原创 2022-07-02 16:15:31 · 2619 阅读 · 2 评论 -
gurobi解的状态及其属性获取
在gurobi中,可以通过提取状态,知道模型状态。也就是利用对偶理论可以知道当前模型解的可能情况。原创 2022-05-31 16:35:35 · 7082 阅读 · 0 评论 -
线性规划和对偶规划学习总结
在学习列生成和分解算法的时候,会频繁用到线性规划和对偶的知识,可以说LP和DP是基础。因此理解线性规划和对偶的本质是很重要的。单纯形法是纯代数运算,从一个顶点跳到另一个顶点;且我们知道最优解一定在顶点取得,可是为什么在顶点一定会取得最优解?为什么从一个顶点跳到另一顶点,通过进基出基就可以实现,它俩为什么是一一对应的?除此以外,在分解算法中的极点和极射线和LP的解是什么样的对应关系?这些问题,应该说必须了解了线性规划和对偶的本质才能够深刻理解,而不至于陷入机械无脑的计算。大概看了慕课的课程,感觉山东大原创 2022-05-31 09:41:33 · 3850 阅读 · 6 评论 -
Benders decompositon学习笔记记录
Benders分解作为3大分解算法之一,听过很久了。好像目前最新的是Benders逻辑分解,比着Benders分解又升级进步了。UTD24中有一些相关的文章,我也在慢慢拜读中。经典的3大分解算法分别是:(1)Benders decomposition (主要思想是行生成+割平面方法);(2)Dantzig-Wolfe decomposition (主要思想其实就是列生成);(3)Lagrangian decomposition (主要思想是 Lagrangian relaxation)。分解原创 2022-05-24 21:22:14 · 1789 阅读 · 0 评论 -
latex排版参考文献引用,bibtex引用不出来的解决方法
参考文献引用有两种方法。一种是直接bibitem,一条条放到latex中;另一种是bibtex,建立自己的数据库。这是后面参考文献来源的方法,具体在正文中引用,方法都一样。第一种,bibitem好处是,简单,基本不会出现问题;坏处是一条条粘贴,比较费时间精力;除此之外,好像最多只能引用99条,有数量限制。方法是:\begin{thebibliography}{00} \bibitem[Parente et al.(2020)]{ESG1} %item1 Parente, Manu原创 2022-05-17 10:31:00 · 19904 阅读 · 9 评论 -
python+gurobi建模数据结构
建模中经常会对不同下标的数据进行组合,为了提高模型求解效率,gurobi封装了更高级的数据结构,即multidict、tuplelist、tupledict。还有一种办法是循环,但显然会降低效率。1.tuplelist是list的扩展,添加/删除元素与list一致。除此以外,还有select快速筛选功能,这样我们可以筛选下标一致的。select类似于SQL中的select-where。使用 tuplelist() 不能忘记 from gurobipy import *import gu原创 2022-04-10 19:49:21 · 1622 阅读 · 0 评论 -
智能优化算法——篇2(邻域搜索大家族)
目录1.种群算法和邻域算法的区别与联系2.算法原理总结2.1 变邻域搜索算法VNS2.2 自适应大邻域搜索算法ALNS在篇1中我们提到,算法很多,但是最经典的有8种,分别是:遗传算法、禁忌搜索算法、模拟退火算法、粒子群算法、蚁群算法、以及邻域搜索中的迭代邻域搜索算法、变邻域搜索算法、自适应大规模邻域搜索算法。前面5种篇1中已有表述,本篇对后面3种做下总结。这些算法有人叫智能算法,有人叫启发式算法,有人叫元启发式算法等等,其实都可以。1.种群算法和邻域算法的区别与联系我之所以分原创 2022-03-31 21:12:06 · 5564 阅读 · 3 评论 -
自适应大邻域搜索算法(Adaptive Large Neighborhood Search——ALNS)
这又是一种基于邻域的搜索算法,邻域及其邻域的相关知识可以看这篇——禁忌搜索(TS——Tabu Search)与邻域搜索基础知识。之所以单独拿出来,是因为邻域搜索Neighborhood Search(NS)(本质也是一种启发式算法)也是一个奇妙的分支。1.邻域搜索及其大家族1.1 邻域搜索涉及概念邻域搜索算法(或称为局部搜索算法)是一类非常常见的改进算法,在每次迭代时通过搜索当前解的“邻域”找到更优的解。邻域搜索算法设计中的关键是邻域结构的选择,即邻域定义的方式。根据以往的经验,邻域越大,局..转载 2022-03-31 10:50:52 · 9969 阅读 · 3 评论 -
gurobi解不一致的问题排查思路总结
结果不一致的排查思路1.看看是否问题约束有违背的。2.是否有小数变量,也就是精度不够;可以设置:m.Params.IntegralityFocus=1 #输出的解都是整数,不带小数。3.检查是否gap设置问题,默认是0.1;可以设置0:m.Params.MIPGap = 0 #设置相对误差,看看效果。4.检查是否系数过大,或者过小,常见的是大M法中的大M,还有个别变量的上下界不宜为无穷大个人测试中发现4位数以下效果比较好。5....原创 2022-03-30 09:59:25 · 3299 阅读 · 0 评论 -
算例、benchmark、全排列、贪心算法-启发式算法备忘
1.问题的算例:就是问题参数的具体化。通俗来说,就是给参数赋值。2.benchmark:就是求解问题算例的一个基准。比如获得的价值为7,这个最优解可以看成是该算例的一个Benchmark。Benchmark概念的引出——只是为了方便我们对算法的效果进行一个对比。比如说小明同学选了第1个物品和第2个物品,获得的价值为1+4=5,那么小明就可以用他的解决方案和别人的benchmark进行对比。比如与最优的benchmark为7比较的话,显然小明的解质量是更差的,因为所获得的价值比较低。以0-1背包问原创 2022-03-29 10:47:42 · 2793 阅读 · 0 评论 -
禁忌搜索(TS——Tabu Search)与邻域搜索基础知识
禁忌搜索,也是一种常见的邻域搜索算法。其实我觉得很多智能算法本质都是邻域搜索(本质是局部搜索)算法。只不过邻域的应用方式不同,是全局式的邻域搜索算法。比如,局部搜索中最经典的是“爬山算法”。但是会陷入局部最优。禁忌搜索,比较适合解决大规模问题。本质思想是,在极值附近设置禁忌(暂时不许进入)的标识,以达到多多的遍历可行域,保证种群多样性的目的。由美国科罗拉多大学教授Fred Glover在1986年左右提出的,是一个用来跳脱局部最优解的搜索方法。其先创立一个初始化的方案;基于此,算法“移动”到一相邻的原创 2022-03-28 21:31:03 · 8844 阅读 · 0 评论