- 博客(349)
- 资源 (3)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 禁忌搜索算法(TABU)解决路线规划问题(CVRP)
文章目录禁忌搜索算法解决路线规划问题问题定义CVRP问题解决算法禁忌搜索算法局部搜索的两种策略局部搜索的缺点禁忌搜索算法的提出禁忌搜索算法流程图禁忌搜索算法伪码算法结果统计结果详细结果结论代码清单读取测试数据初始解禁忌搜索解法禁忌搜索算法解决路线规划问题问题定义车辆路线规划问题是一个经典的组合优化问题,也是旅行商问题的泛化。该问题的定义为:有给定数量的客户有运输需求;为从某个固定地点出...
2020-03-14 23:35:39
8956
5
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 使用Python画作业调度甘特图
文章目录一、背景二、方案比较Matplotlib方案Plotly方案三、实现方案以柔性作业调度问题用例MK01的最佳调度图未使用annotations进行配置修改画图效果三、代码清单四、相关文档一、背景之前研究过遗传算法解决经典作业调度问题和柔性作业调度问题,并将调度结果使用matlab画甘特图(用任意多颜色表示任意多工件),还是挺有成就感的。但是使用Matlab画出甘特图后没法很好地整合到如...
2020-03-14 20:11:44
9779
4
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 遗传算法解决柔性作业调用问题(flexible job shop scheduling problem)
0、柔性作业调用问题介绍柔性作业车间调度问题 (FJSSP)是组合优化和生产管理领域很重要的研究课题,它是经典的作业车间调度问题 (JSSP)的延伸且被认为是强NP-hard问题。在FJSSP中,同一个工序的加工机器可能有多台。FJSSP由两个子问题组成,第一个子问题是将一系列可选的机器分配给指定的工序,第二个子问题是计算分配给指定机器的工序序列的完工时间。虽然比JSSP仅多了一个将一系列可选
2018-01-14 15:42:02
20044
42
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 遗传算法解决作业调用问题(classic job shop scheduling problem)
车间作业调度问题描述JSP问题是一个包含n个工件和m台机器的调度问题,其常用的数学描述如下: Cmax ≥ tij + pij for all (i,j) ∈ N tkj ≥ tij + pij for all (i,j) (k,j) ∈ A tij ≥ tik + pik for all (i,j) and (i,k) ∈ N tik ≥ tij +
2018-01-14 14:49:55
27144
44
原创 OptaPlanner源码学习-VRPTW问题计算得分
问题定义车辆路线规划问题是一个经典的组合优化问题,也是旅行商问题的泛化。该问题的定义为:有给定数量的客户有运输需求;为从某个固定地点出发和返回的车辆寻找一个最优路线试的可以服务所有的客户车辆路线规划问题是NP-hard问题,一般建议求最优解的近似解。车辆路线规划问题有很多变种,主要包含 Classical VRP(VRP)、 Capacitated Vehicle Routing Problem (CVRP)、 Vehicle Routing Problem with Time Windows
2021-12-27 19:50:11
1032
原创 OptaPlanner实现多目标优化之帕累托最优
这里写自定义目录标题什么是 多目标优化之帕累托最优Optaplanner如何实现帕累托最优什么是 多目标优化之帕累托最优知乎专栏文章[多目标优化之帕累托最优]已经对多目标优化之帕累托最优进行介绍,也可以通过参考文献进行更深入了解Optaplanner如何实现帕累托最优帕累托优化也叫多目标优化,在帕累托评分中,评分限制无优先级差异,而且也没有权重的区别。当比较两个评分时,每个评分细项目均为独立评分,取各个评分细项都占优势的解。然而,理想是美好的,如下图所示,怎么评估 Solution B(1个苹果+6
2021-12-27 18:10:57
1520
原创 MapStruct + lombok实现优雅实体转换
1、是什么?MapSturct 是一个生成类型安全, 高性能且无依赖的 JavaBean 映射代码的注解处理器(annotation processor)。抓一下重点:注解处理器可以生成 JavaBean 之间那的映射代码类型安全, 高性能, 无依赖性从字面的理解, 我们可以知道, 该工具可以帮我们实现 JavaBean 之间的转换, 通过注解的方式。同时, 作为一个工具类,相比于手写, 其应该具有便捷, 不容易出错的特点。具体见https://mapstruct.org/2、如何接入&
2021-05-12 20:15:37
832
1
原创 Java通用并发调度框架
1.背景为提高API接口性能,一般需要API接口依赖的对部分其它服务接口调用进行并行化处理。之前逻辑是采用ThreadPoolExecutor+CountDownLatch进行并行调度控制,该方案有个较大缺点为很容易造成代码膨胀和不可维护,需要开发一个新的调度框架来提高并行调度的友好程度。2.解决方案开发一套并行调度框架,底层逻辑仍然为ThreadPoolExecutor+CountDownLatch,降低并行开发接入难度。2.1执行单元抽象类TCallablepublic class TCall
2021-05-12 19:34:53
478
原创 分布式监控平台CAT原理
背景介绍背景-无工具帮助时对系统认知什么样?在干什么?干的怎么样?如何干得更好?生病了如何发现?背景-面临的问题快速发现和定位问题系统频繁FullGC导致系统超时系统存在内存泄露系统异常5分钟后收到报警邮件上线后快速浏览下系统状况CAT简介CAT简介-链路追踪框架对比CAT简介CAT(Central Application Tracking)• 基于纯Java开发的分布式实时监控系统• 分布式• 实时 (毫秒)• 近全量• 高可用CAT简介-快速发现
2021-03-02 20:41:01
2196
原创 zookeeper和snowflake结合生成分布式唯一ID
文章目录背景将traceId写入日志如何获取traceIdJava 自带UUID开源解决方案如何生成工作机器ID整体代码程序如下背景为便于问题定位,最近想通过日志记录每个HTTP请求的链路,即通过记录在日志内的traceId快速查出该HTTP请求对应的所有业务日志。对于争分夺秒的问题定位,依据traceId来定位问题与通过time + threadId相比,简直降维攻击。将traceId写入...
2019-12-08 22:37:48
1645
原创 RPC框架Thrift学习
1. 前言1.1 RPC协议RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。一个通俗的描述...
2019-04-12 16:14:43
1714
原创 request.log日志异常排查
问题背景问题定位响应体大小为何打印为’-‘?response的contentLength为何为-1?问题解决方案一:http请求不再设置gzip压缩方案二:返回结果前设置响应体大小方案三:升级jetty版本【最终方案】问题背景线上HTTP请求日志按照Common Log Format打印。目前线上打印出的日志没有响应内容的大小。线上日志如下: 203...
2018-07-28 23:00:28
3205
原创 代码仓库敏感词检查
1、先说下背景:平时写代码无意间可能就会留下敏感词的,网上也会经常爆出某些公司代码存在敏感词被公众知晓而造成公关危机,就像代码sonar检查一样,RD也是有检查代码仓库敏感词的需求,但是目前公司层面还未提供这种服务。2、一般通过关键字进行词汇检索,最方便的方式是使用shell脚本的grep命令来进行,如 grep -r “keyWord” projectDir;如果是多关键字检索,则可以写成g...
2018-07-28 22:51:09
1977
原创 定时删除服务器的日志
如何定时删除服务器日志如何删除服务器旧日志# delete_projectName_log.sh //删除日志的脚本#!/bin/bashfind /opt/logs/projectName/ -mtime +7 -name "mall.log-*" -exec rm -rf {} \; #找到超过7天的日志执行删除操作find /opt/logs/projectName/...
2018-05-01 23:57:33
2203
原创 通过request log统计网址高峰访问时间段
任务以小时为单位统计10月份至11月份每天网站访问量的大致分布(以测试环境为例)获取基础数据以小时为单位查询一月中服务器处理请求的数量 具体的实现思路是以小时为单位统计request.log中请求的数量,实现上述功能的脚本如下#!/bin/bash# 查询request.log中每个小时请求api的数量 for i in {1..30} # 11月1日~30日
2018-01-14 14:11:47
1216
原创 使用GeoHash解决根据经纬度和区域半径搜索商家
1、GeoHash是啥? GeoHash通过某种方法将二维的点数据转换成一维的数据,也就是将二维的经纬度转换成一维的字符串,方便对位置进行索引; 2、GeoHash特点 字符串越长,表示的范围越精确。5位的编码能表示10平方千米范围的矩形区域,而6位编码能表示更精细的区域(约0.34平方千米) 3、GeoHash优点 1. 通过数据库的索引可以实现快速搜索商家 2. 容易做缓存 3.
2017-10-29 22:28:35
9185
原创 如何快速定位线上问题?
I、登录环境 使用合适的工具快速登录环境是解决线上问题的前提。II、打日志 a、调用外部重要服务的地方最好打个日志,方便追踪到调用系统返回值是否是正确的。 b、在方法中打日志尽量要克制,冗余日志太多影响问题定位;系统访问量增加后容易导致磁盘报警; c、异常情况日志更详细,日志最好包含上下文,这样可以省去不少定位时间。III、问题定位 1、单纯根据某明显的文本特征去查找某段日志 grep
2017-10-29 22:07:20
2441
原创 EventBus使用
EventBus 1. EventBus,事件总线,guava基于观察者模式的优雅实现。对于事件监听和发布订阅模式,使用guava eventbus可以省去开发人员很多事情,不用在去定义那些复杂的类或接口来实现事件发布与订阅。在guava eventbus中,开发人员只需要在订阅方法上添加上@Subscribe注解就可以了,这样一来就省去了大量共用的编码工作。guava eventbus提供了同步
2017-06-08 20:09:59
1447
原创 FutureTask的使用方法
FutureTask的使用方法FutureTask demo的运行结果FutureTask的使用方法package com.mnmlist.concurrent;import java.util.concurrent.*;/** * @author mnmllist@163.com * @date 2017/05/07 * @time 23:04 */public class Futu
2017-05-21 22:58:55
1550
原创 生产者消费者问题的几种实现
synchronized实现生产者消费者模型ReentrantLock实现生产者消费者模型BlockingQueue实现生产者消费者模型Semaphore实现生产者消费者模型生产者消费者问题是一个经典的问题,一般情况下都会使用synchronized关键字来对生产和消费逻辑进行加锁 ,最近学习了下并发编程相关的基础知识,尝试使用其它的几种方法来实现生产者和消费者模型。1. synchroni
2017-05-21 20:12:58
3173
原创 使用CountDownLatch模拟指令重排
[TOC]1. 使用CountDownLatch模拟指令重排import java.util.concurrent.CountDownLatch;/** * @author mnmlist@163.com * @date 2017/05/18 * @time 16:29 */public class InstructionsRearrangement { public static
2017-05-21 19:37:03
1052
原创 单例模式的几种写法
测试类单例模式饿汉模式懒汉模式对整个方法加锁懒汉模式对关键语句加锁测试类/** * @author mnmlist@163.com * @date 2017/05/21 * @time 12:04 */public class SingletonDemo { public static void main(String[] args) { // test S
2017-05-21 19:02:43
527
原创 类型装载、连接与初始化
I. 装载:将二进制形式java类型读入Java虚拟机;II. 连接:将这种已经读入虚拟机中的二进制形式的类型数据合并到虚拟机的运行状态中去。连接又分为三个解决:验证、准备和解析。1.验证: 确保java类型数据格式正确且适于Java虚拟机使用。2.准备:负责为该类型分配它所需的内存,比如为它的类型变量分配内存。3.解析:负责把常量池中的符号转换为直接引用。解析也可以在初始化后进行。II. 初始化:给变量
2017-03-12 00:23:10
583
原创 Can't connect to remote MySQL server with error 61
0.问题描述 通过Navicate连接远程MySQL服务器时出现了Can’t connect to remote MySQL server with error 61问题,通过查找stackoverflow找到下面的解决方案,记录一下。1.检查监听状态netstat -tulpen//如果3306端口没有sql服务,或者mysql服务器仅监听本地端口localhost 127.0.0.1,需要将
2017-02-19 12:14:43
1426
原创 shell命令学习总结(综合版)
shell基本命令for循环数学计算逻辑表达式数学表达式的计算数组的基本操作文本操作cut命令head命令tr命令sort命令uniq命令paste命令awk和sed命令使用awk命令sed命令grep命令1.shell基本命令for循环for循环输出1,3,5,7,9…97,99for((i=1;i<100;i+=2))do echo $i;done/
2017-02-16 22:24:42
1394
原创 Spring MVC执行流程
1.1 架构图1.2 执行流程1.用户发送请求至前端控制器DispatcherServlet 2.DispatcherServlet收到请求调用处理器映射器HandlerMapping。 3.处理器映射器根据请求url找到具体的处理器,生成处理器执行链HandlerExecutionChain(包括处理器对象和处理器拦截器)一并返回给DispatcherServlet。 4.Dispatche
2017-02-16 19:48:24
4211
1
原创 shell命令之基本的shell命令
shell命令之基本的shell命令题目出处:https://www.hackerrank.com/domains/shell/bash/page:1
2017-02-15 19:48:31
666
原创 shell命令之文本处理
文本处理之cut、head、tr、sort、uniq和paste命令题目出处:https://www.hackerrank.com/domains/shell/textpro/page:1
2017-02-15 19:44:56
581
原创 shell命令之基本的数组操作
shell命令之基本的数组操作题目出处:https://www.hackerrank.com/domains/shell/arrays-in-bash/page:1
2017-02-15 19:09:15
620
原创 shell命令之awk、sed和grep
shell命令之awk、sed和grep命令的使用题目出处:https://www.hackerrank.com/domains/shell/grep-sed-awk/page:1
2017-02-15 09:43:17
925
原创 使用shell脚本生成*Db.java、*.thrift或*.yaml文件语句
照着数据库里的建表语句一个个去写对数据表的操作的java语句时是很烦的,而且很容易出错,为什么不用新的的方法来实现这些功能呢。于是就想到了用shell语句来完成这些任务,效果见下面部分。前面博客文章介绍了使用shell命令生成*Db.java、*.thrift或*.yaml文件所需语句,但使用起来并不是那么顺手,还需一条条执行,很繁琐,于是想直接将上述命令生成一个shell脚本,执行时只需传入一个sql建表语句的文件
2017-01-11 23:24:07
2597
原创 Guava Lists.transform踩坑小记
前段时间在项目中用到Lists.transform返回的List,在对该list修改后发现修改并没有反映在结果里,研究源码后发现问题还挺大。下面通过单步调试的结果来查看Guava Lists.transform使用过程中需要注意的地方。
2016-12-25 16:39:50
15577
4
原创 使用sed、awk命令生成.java或.yaml文件所需语句
照着数据库里的建表语句一个个去写对数据表的操作的java语句时是很烦的,而且很容易出错,为什么不用新的的方法来实现这些功能呢。于是就想到了用shell语句来完成这些任务,效果见下面部分。本次的实现仅仅是使用一条条语句来实现这种功能,下一步是实现用一个shell脚本来自动化实现这些功能。//TODO
2016-12-24 23:28:04
2466
原创 ThreeSet和Collections.sort排序性能评估
ThreeSet的底层实现是红黑树,它在创建set的过程中实现排序。Collections.sort是在对整个集合进行排序,按道理来说使用TreeSet插入集合元素直至建立整个TreeSet过程中实现排序在时间方面要比Collections.sort对整个集合进行排序效率要高很多,因为它在每次搜索要插入的位置时耗费的时间为log(n),n代表的是当前集合的长度,但实验表明使用Collections.sort对集合进行排序时间耗费要少些。
2016-12-24 22:54:32
8289
1
原创 Guava源码学习笔记
学习和使用Guava可以使自己的代码变得更加优雅、简洁。Know and use the libraries, don’t reinvent the wheel.
2016-12-01 19:53:03
3495
原创 如何抓取微信商城的请求url和返回数据
I.为何有此需求有时由于某种需要需看下某微信商城的售卖货品的设计情况,这就需要看查看下该网站的请求url及返回的数据。首先可以通过微信商城右上角的按钮在手机浏览器中打开,在地址栏中可以看到其请求url。但是有的网站设置为仅仅可以在微信中浏览,通过手机浏览器中浏览会受到限制,访问不了商品列表页,更别提分析相应的url请求返回的商品数据了。目前用的比较多的是用手机连接电脑的无线网,通过
2016-10-27 21:10:07
2488
原创 Effective Java学习笔记(2)
20.用类代替结构C语言的结构体(struct),用类(class)来代替。一个退化到只包含一些数据域,就大体上类似C语言的结构了。而且使用类的好处还有就是可以通过封装带来数据保护的好处(这不就成了JavaBean了吗)。进而Java中有这么一条告诫“公有类不应该直接暴露数据域”。21.用类和接口来代替函数指针在设计模式中的策略模式也是一个典型的应用场景。C语言程序通常使用
2016-10-16 21:21:03
964
原创 Effective java学习笔记(1)
1.考虑用静态工厂方法代替构造函数所谓静态工厂方法,实际上只是一个简单的静态方法,它返回的是类的一个实例。静态方法的好处:a.它与构造函数不同,它有名字,你可以把名字起的更易于阅读。注意:用静态工厂方法代替构造函数后,构造函数就成了private的了,当然如果你希望同时也提供公有的构造函数也是可以的。b.它与构造函数不同,它每次被调用时,不要求非得创建一个新的对象。c.它与构造
2016-10-16 21:18:58
3485
原创 遗传算法解决路线规划问题(Vehicle Routing Problem based on GA)
I.问题描述车辆路径问题(Vehicle Routing Problem,VRP),车辆路径问题是一种组合优化问题,它由Dantzig 和 Ramser在1959年共同提出。VRP是指一定数量的客户,各自有不同数量的货物需求,配送中心向客户提供货物,由一个车队负责分送货物,组织适当的行车路线,目标是使得客户的需求得到满足,并能在一定的约束下,达到诸如路程最短、成本最小、耗费时间最少等目的。VR...
2016-09-26 22:50:55
23273
18
原创 git使用与工作流程
1.将本地代码更新为远端的最新代码这分两种情况,本地代码不存在,用git clone将代码拉过来;本地已存在,使用git pull更新本地代码a.本地不存在项目代码,首先将代码由仓库clone到本地:git clone https://github.com/mnmlist/Algorithms.gitb.本地已存在代码,直接git pull一下更新下本地代码为最新,当然这是全部分支都更
2016-08-27 14:04:30
1551
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人