自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 Q-learning实战

Q-learningQ-learning是强化学习中一种入门级的经典算法。基本思想是对所有状态下的对应动作进行打分,依据最高的分值选择动作。打分的依据是Q表,其中存储了所有状态下动作的分值,Q表通过数据训练而来。Q-learning的优势在于融合了动态规划和蒙特卡洛,构造了时间差分的Q值更新公式,其更新公式如下:找房间问题问题代码#-----------------------------------调用模块-----------------------------------import

2022-05-10 20:48:13 1430

原创 基于Gurobi的列生成算法

前言列生成算法是求解大规模线性规划的有效手段之一,对于难以直接求解的大规模线性规划问题,列生成在某些场景能够缩小问题规模,降低问题求解难度,在可接受的时间内精确求解问题。列生成的基本思路是将一个原问题从一个小的模型开始,即一开始只考虑模型的少量列(变量),然后通过建立子问题,寻找满足进基条件的列,将这些列添加到主模型,直到找不到能够进基的列,那么这个时候我们求解主模型得到的解将等同于包含所有变量的大规模线性问题的解。试想一下,对于某些生产实际问题,其决策变量可能达到百万甚至千万级,使用求解器直接求解的难度

2021-12-10 20:52:54 3742 7

原创 Python+Gurobi求解SWTA问题

前言静态武器目标分配(static weapon-target assignment,WTA)问题是军事领域的著名问题,也是分配问题中的研究热点之一。SWTA问题易于描述但是难以求解,自1958年提出以来,大量学者对其进行了研究,但是对于大规模的SWTA问题求解仍然难以克服,本文将借助Gurobi精确求解小规模的SWTA问题。SWTA问题假设我方有m个武器,敌方有n个目标来袭,对我方资产进行打击,来袭目标j具有不同的威胁程度v_j,我方武器i对于目标j的毁伤概率p_i_j已知,SWTA问题旨在寻找一种

2021-12-09 01:22:47 2541

原创 Python调用Gurobi求解简单线性规划问题

前言Gurobi是一款功能强大的商用求解器,支持Python、C、C++、Java等多种语言调用,相比于Cplex,Gurobi封装更高,更加方便,但是对于初学者而言会更难一些。Gurobi与Cplex存在兼容,Gurobi生成的mps或者lp文件可以在CPlex中运行。另外,在校学生和教师可以免费使用Gurobi的学术版,求解规模和求解速度不受限制。本文将简单记录python调用Gurobi求解的过程。安装用户可以通过gurobi官网下载并安装软件:gurobi官网,下载软件后学生可通过学生认证获取

2021-12-08 15:59:17 13185 7

原创 folium地图可视化

前言在python中使用folium包可以进行地图可视化操作,非常方便。folium官方地址为folium基本操作1 显示北京地图,北京的经纬度为[39.5427, 116.2317]。2 鼠标点击显示经纬度。3 添加标记4 以米为单位添加圆形标记5 以像素为单位添加圆形标记5 点击地图手动添加标记...

2021-08-30 14:50:32 1032

原创 cplex求解线性规划(python)

前言代码import cplex# 数据my_obj = [1.0, 2.0, 3.0]my_ub = [40.0, cplex.infinity, cplex.infinity]my_col_names = ['x1', 'x2', 'x3']my_rhs = [20.0, 30.0]my_row_names = ['c1', 'c2']my_sense = 'LL'# 模型prob = cplex.Cplex()# 目标函数prob.objective.set_sense

2021-08-24 13:18:54 2200

原创 遗传算法(GA)

前言遗传算法是典型的智能算法,其本质也是通过不断搜索从而得到最好的解决方案,但是与随机搜索不同,遗传算法的搜索具有一定的智能性,在搜索时它更倾向于选择适应度更优的解决方案,以下是遗传算法的一个基本流程图:在上述基本遗传算法的基础上,可以在初始种群、个体选择、交叉方式、变异方式以及局部优化等方面作进一步调整,从而达到更好的效果。搜索类算法改进的本质基本都是让搜索具有全局性或者使得每次搜索的解更优质。构造使用遗传算法求解旅行商问题最主要的问题是编码和交叉,要保证交叉过程中尽量不产生坏解且交叉能够带来足

2021-08-22 12:45:25 1011

原创 改进贪心算法

前言贪心算法很容易陷入局部最优,基本无法找到全局最优解,为了得到更好的解,可以考虑在贪心算法求得解的基础上,对解进行进一步改进,接下来将使用爬山法对贪心算法的解进行改进。爬山法爬山法是一种局部搜索方法,在有一个解决方案的基础上,我们可以对解决方案进行适当地改变,这种操作也称之为领域操作,如果改变后的解决方案优于改变前的解决方案,则保持这种改变,否则做还原操作。爬山法是典型的局部搜索算法,它只接受好的改变,拒绝坏的改变,这有很大的局限性。与之相对应的是模拟退火算法,他以一定的概率接受坏的改变,可以看作一

2021-08-21 16:44:40 1766 2

原创 贪心算法(greedy algorithm)

前言贪心算法是最基础的启发算法之一,原理简单,操作方便,其基本思想是每一步都作出当前的最优决策,它基本能够保证解的质量不会太差,但是对于解空间足够大的组合优化问题,要找到最优解基本不可能。在TSP问题中,贪婪的定义是每次都从当前城市选择一个距离最近的城市。求解使用ortools求解TSP问题,与之前整数规划使用的为同一数据。import pandas as pdfrom ortools.linear_solver import pywraplp# 数据distance = pd.read_t

2021-08-21 16:08:24 368

原创 TSP问题

前言TSP问题是广为人知的组合优化问题,它易于描述,但是难以求解。基于TSP问题的特性,决定使用通过TSP问题来学习各类启发算法,比较不同启发算法在旅行商问题上的表现。问题TSP问题可以描述为:现有一些节点,节点和节点之间均可相连形成边,节点之间的边存在距离,需要找到一个遍历方案先后访问所有的点,使的遍历的总距离最短。模型旅行商问题可以建模为一个纯整数规划模型:目标函数最小化总距离,约束1-2保证每个节点都能进出一次,约束3保证不会出现多个圈,约束4-5保证便利顺序属于0~n-1,约束6-

2021-08-21 13:58:43 17486 9

原创 or-tools求解最大流问题

前言最大流问题(maximum flow problem),一种组合最优化问题,就是要讨论如何充分利用装置的能力,使得运输的流量最大,以取得最好的效果。求最大流的标号算法最早由福特和福克逊于1956年提出,20世纪50年代Ford、(Fulkerson)建立的“网络流理论”,是网络应用的重要组成成分。下图为一个简单的网络流问题示意,共5个节点,编号为0、1、2、3、4,节点相连的边为可以通过的最大流量,箭头所指为流向,现欲求从节点0到节点4的最大流量。代码or-tools中提供了求解网络流问题的标准

2021-08-16 12:04:48 572

原创 or-tools求解指派问题

前言指派问题是生产生活中的常见问题,假设我们有m个工人,需要完成n项工作,每个工人最多完成一项任务,且每项任务必须指定一个工人完成,目标是最小化完成所有任务的成本。下图为指派问题的一个简单示意,左侧为工人,右侧为任务,连接标注了对应 工人完成对应任务的成本,表格为工人完成任务的成本的具体数据。代码from ortools.linear_solver import pywraplp# 求解器solver = pywraplp.Solver.CreateSolver('SCIP')# 数据

2021-08-15 15:45:43 866

原创 or-tools求解约束规划

前言约束优化或约束规划(Constraint programming, CP)是指从一组非常大的候选集合中找出可行的解决方案,在这些候选集合中,问题可以用任意约束来建模,许多科学和工程学科中都存在CP问题。CP是基于可行性(寻找一个可行的解决方案)而不是最优化(寻找一个最优的解决方案),它关注的是约束和变量而不是目标函数。实际上,CP问题甚至可能没有目标函数——目标可能只是通过向问题添加约束,将各种可能的解决方案缩小到更易于管理的子集。问题假设有3个变量x、y、z,三个数的取值都是{0,1,2},唯

2021-08-14 21:14:13 1273

原创 or-tools求解整数规划

or-tools求解整数规划问题前言OR-Tools是一个用于优化的开源软件套件,用于解决车辆路径、流程、整数和线性规划以及约束编程等世界上最棘手的问题。同时OR-Tools提供了C++,Python,Java,.NET的接口,同时提供统一接口封装来调用商业求解器如Gurobi, CPLEX等,也包括开源求解器如SCIP, GLPK, ortools等。在python中安装ortools使用pip命令即可。问题代码from ortools.linear_solver import pywrap

2021-08-14 20:29:58 1628

原创 一文看懂树的前序遍历、中序遍历、后序遍历

概念首先我们要清楚基本概念,前、中、后序遍历中的前、中、后指代的是树的根、左节点、右节点之间的遍历顺序。前序遍历:遍历顺序为根左右中序遍历:遍历顺序为左根右后序遍历:遍历顺序为左右根那么对下图而言,前序遍历为UNI,中序遍历为NUI,后序遍历为NIU,观察这三种情况,可以发现前中后实际上指的是根的遍历顺序。实例假设给定如下所示一颗二叉搜索树,那么我们如何对其进行前序遍历、中序遍历以及后序遍历呢?前序遍历前序遍历的遍历顺序是根左右。我们首先从根节点U出发,由于它是根节点因此U排在首位,

2021-02-08 15:52:22 25566 1

原创 基于Cplex的分支定价

前言分支定价(branch and bound)和分支定价(branch and price)仅一字之差,这两者之间也有着紧密联系,简单来说分支定价=分支定界+列生成。个人觉得在运筹学领域,分子定价算法也算是比较高级的算法了,要学习分支定价,首先要对分支定界和列生成非常熟悉,分支定界和列生成的基本原理和Cplex实现可参考我的博客分支定界和列生成,到目前为止,我没有在网上找到完整的分支定价代码,因此我觉同自己从头开始写一份,前面的几篇博客都是分支定价的铺垫。分支定价算法话不多说,首先给出分支定价算法

2021-01-16 23:01:45 4114 5

原创 基于Cplex的分支定界

前言分支定界算法是求解整数规划的最常用方法之一,它不仅适用于纯整数规划问题,也适用于混合整数规划问题。分支定界的基本思想是将可行区域分解为越来越小的区域,这一过程为分支过程,对于结果劣于当前界的分支,可以将其舍去,这一过程称之为剪枝,而当我们找到结果好于当前界的整数解,则需要更新当前界,这称之为定界。整数规划整数规划问题特指某些变量或全部变量为整数的规划问题,本文说的整数规划指整数线性规划。下面我们看一个简单整数规划的例子。加入不考虑变量是整数,那么我们直接使用单纯形法求解即可,最终得出答案为:

2021-01-16 11:53:01 2252 3

原创 基于Cplex的列生成技术

前言首先介绍一下什么是列生成,列生成技术是一种求解大型线性规划问题的技术,广泛应用于机组人员调度问题、切割问题、车辆路径规划问题。以上问题有一个共同点,即小规模的问题可以直接使用线性规划进行求解,但是对于大规模的问题,直接求解往往行不通,计算机的内存和运算速度都不能满足要求,实际上,这类问题随着规模的增加,复杂度基本呈指数增长。通过列生成技术,我们可以将模型缩小到我们能够承受的规模,然后进行求解,而且列生成是保证精确解的。顾名思义,列生成就是不断地生成列,直到找不到满足条件的列,在这种情况下,我们可以保证

2021-01-15 17:15:36 2717

原创 Cplex求解线性规划

前言本文将介绍使用Cplex进行简单的线性规划求解,本文将介绍Cplex中两种常用的建模方式,即按行建模和按列建模。实际上还有一种按非零元素建模,本文暂时不涉及。编程环境是VS2019+Cplex12100,环境配置可参考博客:https://blog.csdn.net/weixin_38442390/article/details/112545696。按行添加代码#include<ilcplex/ilocplex.h>ILOSTLBEGIN/* 数学模型 Maxim

2021-01-12 21:20:40 4609 2

原创 VS2019配置Cplex12100

前言Cplex是IBM公司的一款高性能求解器,它在线性规划、整数规划等多个领域都具有不俗表现,对于运筹专业的学生来说,Cplex是不得不学的“神器”。从本文开始,博主将在此记录Cplex的学习之旅,目测内容有基于Cplex的简单建模、分支定界、列生成、分支定价。Cplex支持python、java、C++等多种语言,我选择我比较熟悉的C++。本文将详细介绍VS2019配置Cplex的过程,读者也可选择其他版本,但是并非所有的VS版本都支持Cplex的相应版本,总的来说,更新的VS支持更新的Cplex。

2021-01-12 20:44:51 1967 9

原创 MNIST手写数字识别(pytorch)

介绍MNIST手写数据集共包含70000张手写数字图片以及对应标签,测试集部分为60000张,剩余10000张为测试集,在pytorch中可直接进行下载。python代码`import torchimport torch.nn as nnfrom torchvision import datasets, transformsimport torch.utils.datatrain_dataset = datasets.MNIST(root=“C:/Users/lxw/Desktop/MNIST

2020-12-31 09:35:32 428

原创 C++线性回归(SGD、BGD、MBGD)

代码#include<iostream>#include<random>using namespace std;double w = 0;//y=w*x+b,初始wdouble b = 0;//y=w*x+b,初始bdouble true_w = 10.0;//真实wdouble true_b = 10.0;//真实bdouble alpha = 0.3;//步长int samples = 1000;//样本数double* x = new double[s

2020-12-08 16:41:00 508 1

原创 opencv手动实现运动目标检测

前言运动目标检测是图像领域的一个经典问题,相关的算法较多。本文的运动目标检测主要基于背景消去(Background Subtraction)算法,本文将手动实现背景消去算法并检测到运动物体的实时位置。编程的基本环境是VS2019+opencv4.4。一、基本原理我们的基本思想是使用背景消去算法将运动物体从图片中提取一下,想象一下,一张没有运动物体的环境图,和突然出现某个物体的图,那么两张图的绝大部分都还是相同的,只有运动物体出现的区域是不同的,那么我们就能根据这个特点将运动物体和背景区分开。最简单的

2020-11-26 20:27:00 4931 1

原创 VS2019配置opencv的两种方法

前言opencv是一个开源的跨平台计算机视觉库,是我们进行机器视觉学习的有力工具。opencv整体由C++语言编写,它轻量且高效,并且提供了C++,python,java等多种语言的接口。本文将详细讲解使用VS2019调用opencv的两种方法:一是在IDE中完成一系列配置,二是直接使用命令行编译。一、在IDE中配置opencv首先我们可以直接进入opencv官网下载opencv,本文不再赘述。opencv有多个版本可供下载,本文选择的是opencv4.4,读者也可下载更新的版本或者以前的版本,但不要

2020-11-11 14:20:28 9009 12

原创 凸包问题的GRAHAM-SCAN解法(附C++代码)

前言凸包(convex_hull)是一个计算图形学的概念,在二维空间中凸包可以看成一个点集中所有点的最小凸多边形。凸包问题实际上是一个简单的数学问题,只要熟悉原理我们可以很快地编程实现求解,但是网上很多资料都写得比较混乱,推导过程不完整,因此本文将详细介绍凸包问题的推导过程,并附上相应的C++代码。一、凸包问题使用GRAHAM-SCAN求解凸包问题的算法流程如下:上述算法流程出自权威算法类教材,整个流程是绝对正确的,也就是说只要照着上述流程进行代码实现,是可以正确求解凸包问题的。为了让读者更进一步

2020-10-23 10:57:20 3997 9

原创 基于优先队列的Dijkstra算法

前言最短路径问题,即在给定的连接图中,求解节点之间的最短路径。Dijkstra算法是典型的单源最短路径算法,单源即只能求解某个节点到其他节点的最短路径。另外,此算法不能处理边权重为负的情况。一、最短路径问题最短路径问题是图论的一个经典算法问题,最短路径问题包含多种问题形式,本文着重讲解单源最短路径问题及其优化求解方法。如下图所示,给出由多个节点相互连接构成的图,节点之间连接的好坏用权重来衡量,我们要求解某点到任意点的最短路径,这是典型的单源最短路径问题,我们可以使用Dijkstra算法对其进行求解。

2020-10-15 16:39:33 5310 3

原创 匈牙利算法求解指派问题(C++代码)

前言匈牙利算法能精确求解指派问题,获取最优分配方案。匈牙利算法求解指派问题基于以下原理:在一个成本矩阵中,对某一行或者某一列加上或减去一个数,最优的分配方案不变。基于此原理,我们可以对成本矩阵进行变换,直到使用试指派能够找到最优解(对一个n*n的成本矩阵而言,找到n个独立0元素)。一、指派问题实际中,我们会经常碰到此类问题:有n项任务需要均分给n个工人完成,工人i完成任务j的成本为cij,我们要找到一种分配方案,使得总成本最小。如下图是一个4员工4任务的指派问题:二、匈牙利算法对于一个规模为n

2020-10-13 21:54:24 15534 32

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除