![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 53
xinxing_Star
这个作者很懒,什么都没留下…
展开
-
P问题, NP问题, NPC问题, NP-hard问题
复杂度级别: 1)多项式级别O(n^k);2)非多项式级别,如,指数级O(a^n)和阶乘级别O(n!)。后者的复杂度无论如何都大于前者。 归约(约化):如果能找到这样一个多项式变换法则,对任意一个程序A的输入,都能按这个法则变换为程序B的输入,使两程序的输出相同,那么我们说,问题A可归约为问题B。 通俗解释:一个问题A可以归约为问题B指,可以用问题B的解法解决问题A,或者说,问题A可以“变成”问题B。 特点:“问题A可归约为问题B”有一个直观意义,B的时间复杂度高于或者等于A的时间复杂度,既,问题A原创 2021-10-14 09:26:04 · 417 阅读 · 0 评论 -
指派问题(Assignment Problems - AP)
原创 2021-10-13 11:03:32 · 453 阅读 · 0 评论 -
0-1规划的隐数法
解0-1 型整数规划最容易想到的方法,和一般整数规划的情形一样,就是穷举法,即检查变量取值为0 或1 的每一种组合,比较目标函数值以求得最优解,这就需要检查变量取值的2的n次方个组合。对于变量个数n 较大(例如n>100),这几乎是不可能的。因此常设计一些方法,只检查变量取值的组合的一部分,就能求到问题的最优解。这样的方法称为隐枚举法(Implicit Enumeration ),分枝定界法也是一种隐枚举法。当然,对有些问题隐枚举法并不适用,所以有时穷举法还是必要的。下面举例说明一种解0-1.原创 2021-10-13 09:51:24 · 750 阅读 · 0 评论 -
最清楚的-列生成算法简介
本文尽量避免数学公式,使用文字解释列生成算法的原理,争取让读者能形成直观上的理解。为什么需要了解列生成算法的原理列生成算法无法简单地调用第三方库来使用,必须根据具体问题,构造不同的算法模型。 只有了解了原理,才能在踩到各种坑时,有所针对地去优化各种细节。不然只能抓瞎或者抓腮。列生成算法原理列生成算法可以从两个视角来理解:对偶角度和单纯形算法角度。对偶角度啥是对偶这里简单过一下对偶的概念。假设有个长得很标准的线性规划问题:那么,它的对偶问题为:下面我们都以这个问原创 2021-10-12 16:03:55 · 8031 阅读 · 1 评论 -
单纯形法的基本思路和原理
原创 2021-10-12 14:42:01 · 1252 阅读 · 2 评论 -
分支定界算法
原创 2021-10-12 09:04:35 · 178 阅读 · 0 评论 -
割平面算法
01前言我们的标题相信大家已经看到了,至于这是什么东西呢?咳咳,这可不是一起去你邻居家找茬的啊……言归正传,关于大邻域搜索这一块的启发式算法,国内还算比较少的了。那么,今天我们一起来一步一个脚印来了解这个神秘的算法吧。01 概念科普篇关于neighborhood serach,这里有好多种衍生和变种出来的胡里花俏的算法。大家在上网搜索的过程中可能看到什么Large Neighborhood Serach,也可能看到Very Large Scale Neighborhood Search或原创 2021-10-12 10:05:13 · 357 阅读 · 0 评论 -
10分钟彻底理解自适应大邻域搜索算法
算法介绍自适应大邻域搜索算法(Adaptive Large Neighborhood Search),简称(ALNS),是由Ropke与Pisinger在2006年提出的一种启发式方法,其在邻域搜索的基础上增加了对算子的作用效果的衡量,使算法能够自动选择好的算子对解进行破坏与修复,从而有一定几率得到更好的解。应用场景1.外卖场景:搜索订单分配骑手的最优方案2.派单场景:搜索订单分配司机的最优方案3.车辆路径规划问题同类算法在邻域搜索算法中,有的算法可以只使用一种邻域,如模拟退..原创 2021-10-11 10:28:47 · 7102 阅读 · 0 评论 -
Pick and delivery problem的简介与建模实现(一)
目录: Pick and delivery problem简介 多对多(M-M)问题 Python调用Gurobi实现 模型建立 lazy constraints 算例与结果 参考文献 Pick and deliveryproblem简介Pick and delivery problem(PDP)是一类重要的路径规划问题,其中货物或乘客必须从不同的起点运输到不同的目的地。这些问题通常定义在一个图上,其中顶点表示要运.原创 2021-10-11 10:10:36 · 1158 阅读 · 2 评论 -
运筹优化——生产排程问题简介
【摘要】 生产排程问题简介: 生产排程问题源于工业生产,具有重要的实际意义和经济价值; 由于实际情况复杂、限制条件多变,相关问题种类繁多; 求解方法和思路众多,以启发式方法为主基本概念定义:企业资源计划 (ERP)是企业的信息中枢,高级计划与排程(APS)作为ERP的补充,用于协调物流、开发瓶颈资源和保证交货日期。APS包括需求和供应计划、运输和生产计划排程等各种供应链计划模块。排程做为其中重要的一环,是对生产过程或制造过程中的工作和工作量进行安排、控制和优化的过程。排程可以用来分配生产原...原创 2021-10-09 15:35:38 · 4578 阅读 · 0 评论 -
菜鸟车辆路径规划求解引擎研发历程
车辆路径规划问题(Vehicle Routing Problem, VRP)是物流领域最经典的优化问题之一,具有极大的学术研究意义和实际应用价值。菜鸟网络高级算法专家胡浩源带领仓配智能化算法团队经过两年的研发,逐步沉淀出了一套完善、强大的车辆路径规划求解引擎,为菜鸟内外部多项业务提供了技术支持。通过不断地对算法进行探索打磨,我们终于在车辆路径规划问题最权威的评测平台上打破了多项世界纪录,标志着菜鸟网络在此领域的技术研究已经进入世界前列。问题介绍车辆路径规划问题是运筹优化领域最经典的优化问题之一。在此原创 2021-10-09 15:00:17 · 548 阅读 · 1 评论 -
用遗传算法,开启研究车间调度问题之门
车间调度问题描述、分类,柔性作业车间调度问题描述,遗传算法的基本理论,遗传算法求解柔性车间调度问题及代码实现为主线,为你打开智能优化算法求解柔性作业车间调度问题之门。#1.车间调度问题描述#调度问题的一般性定义为:在一定的约束条件下,把有限的资源在时间上分配给若干个任务,以满足或优化一个或多个性能指标。在制造业中,车间调度问题可以描述为n个工件在m台机器上加工;一个工件有多道工序,每道工序可以在若干机器上加工,并且必须按一些可行的工艺次序进行加工;每台机器可以加工工件的若干工序,并且在不同机器上原创 2021-10-09 14:32:37 · 1852 阅读 · 6 评论 -
yoloV5损失函数
原创 2021-08-20 18:27:31 · 5788 阅读 · 1 评论 -
yolo目标检测基本思想
原创 2021-08-20 17:05:50 · 587 阅读 · 0 评论 -
yoloV5安装
原创 2021-08-20 14:42:10 · 185 阅读 · 0 评论 -
目标检测性能指标和计算方法
原创 2021-08-19 08:38:52 · 300 阅读 · 0 评论 -
cv-目标检测和任务说明
原创 2021-08-18 15:29:36 · 105 阅读 · 0 评论 -
cv-混淆矩阵
原创 2021-08-18 15:27:33 · 116 阅读 · 0 评论 -
帕累托最优(Pareto Optimality)
帕累托最优(Pareto Optimality),也称为帕累托效率(Pareto efficiency),是指资源分配的一种理想状态,假定固有的一群人和可分配的资源,从一种分配状态到另一种状态的变化中,在没有使任何人境况变坏的前提下,使得至少一个人变得更好,这就是帕累托改进或帕累托最优化。帕累托最优状态就是不可能再有更多的帕累托改进的余地;换句话说,帕累托改进是达到帕累托最优的路径和方法。 帕累托最优是公平与效率的“理想王国”。是由帕累托提出的。提出这个概念是以意大利经济学家维弗雷多·帕累托的名原创 2021-08-18 15:25:25 · 10311 阅读 · 0 评论 -
强化学习(Reinforcement Learning)知识整理
马尔可夫决策过程(Markov Decision Processes,MDPs)MDPs 简单说就是一个智能体(Agent)采取行动(Action)从而改变自己的状态(State)获得奖励(Reward)与环境(Environment)发生交互的循环过程。MDP 的策略完全取决于当前状态(Only present matters),这也是它马尔可夫性质的体现。其可以简单表示为:基本概念: 有限状态 state 集合,s 表示某个特定状态 : 有限动作 action 集合,a 表...原创 2021-06-05 15:28:56 · 1681 阅读 · 0 评论 -
最形象的八大排序算法——程序员必看
八大排序,三大查找是《数据结构》当中非常基础的知识点,在这里为了复习顺带总结了一下常见的八种排序算法。常见的八大排序算法,他们之间关系如下:排序算法.png他们的性能比较:性能比较.png下面,利用Python分别将他们进行实现。直接插入排序算法思想:直接插入排序.gif直接插入排序的核心思想就是:将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排序的元素小,则交换,直到全部元素都比较过。因此,从上...原创 2020-06-30 09:32:36 · 193 阅读 · 1 评论 -
梯度下降算法非常详细的解释赶快看看
介绍如果说在机器学习领域有哪个优化算法最广为认知,用途最广,非梯度下降算法莫属。梯度下降算法是一种非常经典的求极小值的算法,比如在线性回归里我们可以用最小二乘法去解析最优解,但是其中会涉及到对矩阵求逆,由于多重共线性问题的存在是很让人难受的,无论进行L1正则化的Lasso回归还是L2正则化的岭回归,其实并不让人满意,因为它们的产生是为了修复此漏洞,而不是为了提升模型效果,甚至使模型效果下降。但是换一种思路,比如用梯度下降算法去优化线性回归的损失函数,完全就可以不用考虑多重共线性带来的问题。其实不仅是线性原创 2020-06-04 10:14:12 · 530 阅读 · 0 评论 -
C语言中全局变量存放在哪个位置?
全局变量存放在静态存储区,位置是固定的。 局部变量在栈空间,栈地址是不固定的。栈:就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。堆:就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。自由存储区:就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。全局存储区(静态存储区原创 2020-06-04 10:04:12 · 9968 阅读 · 0 评论 -
Java 数组
数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。Java 语言中提供的数组是用来存储固定大小的同类型元素。你可以声明一个数组变量,如 numbers[100] 来代替直接声明 100 个独立变量 number0,number1,....,number99。本教程将为大家介绍 Java 数组的声明、创建和初始化,并给出其对应的代码。声明数组变量首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:dataType[] arra原创 2020-06-03 17:28:55 · 100 阅读 · 0 评论 -
数据结构——链表
一、链表的定义1.和数组一样,链表也是一种线性表。2.从内存结构来看,链表的内存结构是不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构。3.链表中的每一个内存块被称为节点Node。节点除了存储数据外,还需记录链上下一个节点的地址,即后继指针next。详细定义: 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:.原创 2020-06-03 10:07:36 · 349 阅读 · 0 评论 -
数据结构——数组
一、数组的概念 定义:数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 从概念中可以知道一下几点:数组是线性表。 所谓的线性表就是数据排成一排,想一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。当然除了数组,链表、队列、栈等也是线性表结构 连续的内存空间和形同类型的数据。 正因为有了上述两个特点,数组才能够有一个堪称“杀手锏”的特性:随机访问数组实现下标随机访问 下面通过一个实际的例子来说明:.原创 2020-06-03 09:50:58 · 10257 阅读 · 0 评论 -
常用函数的倒数和微分
原创 2020-06-02 10:33:19 · 1407 阅读 · 0 评论 -
梯度消失、爆炸原因以及解决办法
本文主要深入介绍深度学习中的梯度消失和梯度爆炸的问题以及解决方案。本文分为三部分,第一部分主要直观的介绍深度学习中为什么使用梯度更新,第二部分主要介绍深度学习中梯度消失及爆炸的原因,第三部分对提出梯度消失及爆炸的解决方案。有基础的同鞋可以跳着阅读。其中,梯度消失爆炸的解决方案主要包括以下几个部分。- 预训练加微调- 梯度剪切、权重正则(针对梯度爆炸)- 使用不同的激活函数- 使用batchnorm- 使用残差结构- 使用LSTM网络第一部分:为什么要使用梯度更新规则在介绍梯度.原创 2020-06-01 10:51:38 · 335 阅读 · 0 评论 -
C语言实现各类排序算法超简单
C 排序算法冒泡排序冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。过程演示:实例#include <stdio.h> void bubble_sort(int arr[], int len) { int i, j, temp; for (i = 0; i < len - 1; i++) for (j = 0; j < len - 1原创 2020-05-29 16:00:13 · 268 阅读 · 0 评论 -
详解——冒泡排序、插入排序、选择排序、桶排序
冒泡排序冒泡排序的时间复杂度是O(N2)冒泡排序的思想: 每次比较两个相邻的元素, 如果他们的顺序错误就把他们交换位置def bubbleSort(n): for j in range(len(nums)-1): # 这个循环负责设置冒泡排序进行的次数,同时后面程序取用j的值 for i in range(len(nums)-j-1): # j为列表下标 if nums[i] > nums[i+1]:...原创 2020-05-28 16:26:02 · 232 阅读 · 0 评论