- 博客(54)
- 资源 (4)
- 收藏
- 关注
原创 Kafka笔记 (一) 从Kafka的历史聊起
提到消息中间件,Kafka是我们经常提及的,不过消息中间件的属性只能说是它的基础属性之一,如果你去看官网的简介,会称其为分布式事件流平台,事件流的处理才是它最核心的特点;在我看来,Kafka应该是目前性能最高的开源的事件流平台了,很多开发者可能只是使用了Kafka的Produce和Consume接口来进行消息流的应用,其实它的Connect和Stream API是真正能体现Kafka在流处理上的优势的特性。Kafka的历史很多时候优秀的开源项目并不是作者突发奇想地写出来的,而是由实际的业务需求推动后逐步
2022-01-31 18:58:09 2645
原创 关于博弈论的一点笔记
最近稍微了解了一下博弈论的一些基本概念,它本身是运筹学的一个分支,同时在经济学领域也是非常重要的一个科目,小到游戏设计,大到经济政治,很多案例都可以用博弈论的理论进行设计或者解释;博弈论的理论大都非常有意思甚至反直觉,了解博弈论的一些概念后可以帮助我们从更高的维度去看待生活中的一些事情;另一方面博弈论从数学上看其实还是属于优化问题,我们也可以从运筹优化的角度去理解博弈论的一些理论。这篇文章里我就摘录一些博弈论的概念,加上一点我自己的理解,当然作为非专业人士,可能有些理解偏差。零和博弈博弈论的英文名是Ga
2021-05-14 16:09:51 3071
原创 非线性优化问题处理技术(二) Karush–Kuhn–Tucker条件
对于只有等式约束的非线性优化问题,拉格朗日定理是可以适用的,但是当存在不等式约束时就不适用了,此时Karush–Kuhn–Tucker(KKT)条件是更为通用的处理技术,拉格朗日定理其实只是KKT条件定理的特殊情况。 KKT条件一开始称为Kuhn–Tucker条件, 因为在1951年Harold W. Kuhn 和 Albert W. Tucker发表了该定理的论文,不过人们之后又发现早在1939年一个名为William Karush的学者就在他的硕士论文中涉及了该理论,所以又把他的名字加入到了该定理的命名
2021-05-01 15:15:20 1995
原创 非线性优化问题处理技术(一) 拉格朗日乘子
拉格朗日条件定义映射f:Rn→Rf:\mathbb{R}^n\rightarrow\mathbb{R}f:Rn→R,优化问题表述为:maximiex{f(x):x∈U}subject toU={x∈Rn:h1(x)=a1,...,hm(x)=am}\begin{aligned}maximie_{\mathtt {x}}\quad& \{f(\mathtt{x}):\mathtt{x}\in U\}\\ subject\ to\quad& U=\{\mathtt{x}\in
2021-04-19 15:48:13 2022
原创 求解分配问题(二) 二分图最大匹配算法
我的前一篇文章介绍了对于分配问题的Kuhn-Munkre算法,该算法其实可以看作是邻接矩阵形式的匈牙利算法,如果更抽象地看这个算法,它可以看成是一个二分图匹配算法的变体算法,具体的说,是二分图最大权重匹配算法。我打算也把二分图最大权重匹配算法也介绍下,不过最大权重匹配算法又是基于最大匹配算法设计的,所以这篇文章先介绍二分图的最大匹配算法二分图最大匹配问题分配问题从图论的角度看其实是一个二分图(Bipartite Graph),就是说图中有两个点集,在各自的点集内的点互相没有连接,两个点集间的点可以连接,
2021-03-18 18:19:15 1852 2
原创 求解分配问题(一) Kuhn-Munkre算法
分配问题(Assignment Problem)很常见,例如给多个开发者安排开发任务,一个开发者只能分配到一个任务,一个任务也只能由一个人完成,不同的人对不同的任务有不同的完成时间,那么如何进行安排使得总的开发时间最短就是一个典型的分配问题。如果说传输问题是一类特殊的线性规划问题(传输问题定义),那么分配问题则是一类特殊的传输问题,如果我们把传输问题中所有Supplier和Demander的供应量或需求量都降到1,那么这就变成了一个分配问题既然分配问题属于传输问题,那么Stepping-Stone算法或者
2021-03-18 15:02:35 6115 4
原创 求解传输问题(六) 代码实现
基于前面几篇文章,我用python把TP问题算法实现一下首先定义TPAlgorithm类,它的构造函数中输入supply、demand和cost参数,可以选择用North-West-Corner或者Minimum-Cell-Cost的初始化算法,用SteppingStone或者MODI的迭代算法;handleUnbalance方法用于在实际计算前进行平衡化处理;import numpy as npfrom NorthWestCorner import NorthWestCornerfrom MinC
2021-02-08 14:23:20 410
原创 求解传输问题(五) 特殊情况处理
正如在应用单纯形算法时需要注意处理一些特殊情况一样,计算TP问题时也需要考虑到下面的特殊情况;这里我们还是使用前面的例子进行说明:三个Supply结点,其供应量为:仓库库存(Supply)1. 堪萨斯1502. 奥马哈1753. 得梅因275Total600三个Demand结点,其需求量为:面粉厂需求(Demand)A. 芝加哥200B. 圣路易斯100C. 辛辛那提300Total600路径的单位
2021-02-08 14:00:07 335
原创 求解传输问题(四) Modified Distribution算法
Modified Distribution算法(MODI)其实可以看成是Stepping-Stone算法的变体,它和Stepping-Stone算法的主要区别在于MODI是通过数学表达式直接计算空单元格对总cost的变化情况,而不是先识别Loop我们还是使用之前的例子:三个Supply结点,其供应量为:仓库库存(Supply)1. 堪萨斯1502. 奥马哈1753. 得梅因275Total600三个Demand结点,其需求量为:面粉厂需求
2021-02-08 13:59:10 693
原创 求解传输问题(三) Stepping-Stone算法
当使用某种初始化算法得到TP问题的一个初始解后,就可以使用迭代算法进行最优解的搜索;Stepping-Stone算法和Modified Distribution(MODI)算法是常用的两种算法,这篇文章先介绍Stepping-Stone算法,而初始化算法则默认使用Minimum-Cell-Cost算法还是使用前面文章使用的例子来说明:三个Supply结点,其供应量为:仓库库存(Supply)1. 堪萨斯1502. 奥马哈1753. 得梅因275Total6
2021-02-08 10:38:34 973
原创 求解传输问题(二) 初始化算法
这篇文章介绍两种TP问题的初始化算法:Northwest-Corner和Minimum-Cell-Cost算法还是用前一篇文章中的案例作为例子:三个Supply结点,其供应量为:仓库库存(Supply)1. 堪萨斯1502. 奥马哈1753. 得梅因275Total600三个Demand结点,其需求量为:面粉厂需求(Demand)A. 芝加哥200B. 圣路易斯100C. 辛辛那提300Total600
2021-02-07 17:11:34 597
原创 求解传输问题(一) 传输问题定义
传输问题(Transportation Problem)是一类特殊的线性优化问题,它要解决的是如何安排从不同供应者到需求者的物品数量,来让总的传输成本最小。传输问题最早由 F.L.Hitchcock 在1941年首次提及,由 T.C.Koopmans 在1947年将该问题独立出来,直到1951年由 G.B.Dantzig 运用单纯形算法成功求解;之后各种改善的算法被发明,并且大规模应用于实际的传输问题。我们可以举一个典型的实例进行说明:假设在堪萨斯城(111),奥马哈(222)和得梅因(333)三座城市
2021-02-07 13:54:11 1137 1
原创 单纯形算法 Simplex Algorithm (三)
初始化问题承接前一篇文章,对于原始的线性规划问题,如果约束中某个bib_ibi小于零,直接以初始松弛变量作为基变量得到的基解是不可行的。例如:maxZ=x1+2x2x1+x2≤2−x1−x2≤−1x1,x2≥0\begin{aligned}max\quad& Z=x_1+2x_2\\ & x_1+x_2\leq 2\\& -x_1-x_2\leq -1\\& x_1,x_2\geq 0\end{aligned}maxZ=x1+2x2x1+x2≤2
2021-01-18 19:03:18 485
原创 单纯形算法 Simplex Algorithm (二)
为了真正理解单纯形算法的具体步骤,我查阅了许多文章,不过大部分文章会直接叙述单纯形表的操作,对理解算法帮助有限;也有一些文章直接从线性代数上的原理开始叙述,对于非专业人士又太难了。所幸我找到了一个挺不错的在线课程,感觉是我看过叙述单纯形算法最明了直观的资料了,下面的内容主要就是对这个课程的翻译初始可行解我们直接就用个例子来叙述算法。还是上一篇的例子:maxZ=40x1+50x2s.t.x1+2x2≤404x1+3x2≤120x1,x2≥0\begin{aligned}max\quad& Z
2021-01-18 15:39:49 698
原创 单纯形算法 Simplex Algorithm (一)
单纯形算法是求解线性规划问题最经典的方法,在许多介绍该算法的文章中会使用单纯形表(Tableau)辅助计算,而对Tableau进行的操作本质上都是在对松弛化的线性规划模型进行矩阵运算,从几何表现上看,就是在线性规划问题的定义域上的顶点中迭代搜索,寻找使得目标函数最优的那个顶点。使用Tableau计算虽然很高效,不过对于理解算法原理帮助不大;单纯形算法的原理是基于线性代数的,如果要彻底理解,还是需要很多基础的矩阵知识的。这篇文章里我只是记录和单纯形算法相关的线性代数知识,加深对该算法中一些术语的记忆和理解;算
2021-01-15 09:30:44 3231
原创 分支界定算法实践(三) 精确求解TSP
TSP问题是非常经典的NP难问题,问题描述很简单,但是求解难度却很大。首先还是给出TSP的数学描述:图G(V,E)G(V,E)G(V,E)是一个无向简单图,集合VVV包含了顶点1,2,...,n1,2,...,n1,2,...,n,集合EEE包含了所有边e(i,j),i,j∈Ve(i,j), i,j\in Ve(i,j),i,j∈V. 每条边e(i,j)e(i,j)e(i,j)都有对应的权重wij≥0w_{ij}\geq0wij≥0. 需要找到一个边集合T⊂ET\subset ET⊂E,其包含的边构成
2020-12-03 14:30:12 3027 2
原创 分支界定算法实践(二) 求解01整数优化问题
如果线性整数规划的变量限定为只能0或1,那么称之为01整数线性规划问题,许多工程上的优化问题都可以归纳为01整数规划,这种问题模型很多情况下更便于计算机计算。01整数规划只是一般整数线性规划的特殊情况,相当于多添加了xi≤1x_i\leq1xi≤1的约束,所以一般化的分支界定算法也适用。唯一值得修改的地方在于,以xix_ixi进行分支时,两个分支的额外约束可以直接写成xi=0x_i=0xi=0和xi=1x_i=1xi=1这篇文章着重介绍的是解决01整数问题的另一种算法:隐式枚举(Implicit
2020-11-14 20:25:15 2079 1
原创 分支界定算法实践(一) 求解线性整数优化问题
(本文内容主要参考《an introduction to management science(13e)》中的章节)分支界定算法的主要思想是把问题的可行解划分为多个子集,对子集进行系统化的评估直到最优解找到。分支界定只是一种算法框架,因为如何构造子集、在每个子集如何搜索最优解可以按不同情况有不同的具体实现,当用于求解线性整数优化问题时,就需要结合一般的线性优化算法或者求解器来实现。下面先用一个实例来说明算法的思路,然后用代码实现一下。...
2020-10-28 09:29:42 1217 1
原创 Job Shop Schedule 生产调度问题 (一) 简介
生产调度问题(Job Shop Schedule Problem)是一个非常经典的组合优化问题,在生产制造、项目管理的计划排班上广泛存在;学界对这个课题的研究已经超过50年了,建立了各种理论模型并提出了多种算法,应该说该问题属于最难处理的组合优化问题之一,一方面实际的业务逻辑会相当复杂,学界讨论的很多表现良好模型太过理想化,不太好直接应用到实际,另一方面问题规模的扩大很容易引起计算量的指数增长,无论采用哪种算法都不可能完全解决性能问题。我们先通过一个简单直观的例子来了解JSP的概念。假设某个工厂每天需要生
2020-10-13 20:08:52 16403 3
原创 用PyGame写个飞机游戏
在树莓派和python社区,有个名为pygame的库,是爱好者们常用的开发复古小游戏的工具,通过简单的python代码就可以给自己写个游戏啦。下面的截图是我写的飞机射击游戏:移动、射击吃到一个强力道具Game Over1 游戏主循环2 游戏背景3 添加主角飞机和敌人4 碰撞判定5 添加手柄支持6 更多...
2020-06-03 22:20:42 1034 2
原创 Google OR-Tools(七) 网络流 Network Flows
本文参考Google OR-Tools官网文档介绍OR-Tools的使用方法。1 网络流模型2 最大流问题 Maximum Flows2.1 线性规划建模2.2 Ford-Fulkerson算法2.3 OR-Tools求解3 最小花费流问题 Minimum Cost Flows...
2020-03-16 22:11:42 1223
原创 Google OR-Tools(六) 装箱问题 Bin Packing
本文参考Google OR-Tools官网文档介绍OR-Tools的使用方法。装箱问题的描述是要将一组给定尺寸的物品放置到具有固定容量的容器中,一般情况下由于容器有容量限制,不可能放入所有物品,那么装箱问题的目标是要找到限定约束下使得总价值最大或总花费最小的装箱方法。根据我们具体的目标情况,装箱问题又可分为两类:背包问题(Knapsack problem),容器数量是固定的,每个容器有自己的...
2020-03-07 18:12:58 4983 3
原创 Google OR-Tools(五) 路径问题 Routing
本文参考Google OR-Tools官网文档介绍OR-Tools的使用方法。实际生活中有很多组合优化问题,例如最短路径、背包问题、人员排班等,这些组合优化问题一般属于规模较大的整数规划或者约束满足问题,一般没有直接的算法获得绝对最优解,只能通过启发式或元启发式算法获得相对最佳解。OR-Tools针对路径问题、背包问题和流问题提供了专用接口,相对于通用的求解器有更高的计算效率。1 TSP问题路...
2020-02-23 17:35:28 2271
原创 Google OR-Tools(四) 约束编程 Constraint Programming
本文参考Google OR-Tools官网文档介绍OR-Tools的使用方法。1 约束满足问题1.1 CSP定义在前一篇文章中我提到Google OR-Tools中解决整数规划问题有MP Solver和CP Solver两种工具,但是只介绍了MP Solver,而这篇文章则会介绍CP Solver。之所以会有这两种工具,是因为虽然都是解决整数规划,各自面对的问题类型还是有区别的,CP Sol...
2020-02-18 16:24:48 5672
原创 Google OR-Tools(三) 整数优化Integer Optimization
本文参考Google OR-Tools官网文档介绍OR-Tools的使用方法。1 整数规划很多实际问题的变量不能是小数,比如指派多少人员、调度的航班数、分配的机器数等等,我们称这种问题为整数规划,更特殊的,如果要求变量只能取0或1,则称为0-1规划;还有些情况是部分决策变量是整数,其他可以是小数,则称其为混合整数规划。虽然我们可以用线性函数来表示目标和约束,但是有了变量必须是整数的约束,可行域...
2020-02-17 15:16:08 3169
原创 Google OR-Tools(二) 线性优化Linear Optimization
本文参考Google OR-Tools官网文档介绍OR-Tools的使用方法。1 线性规划问题线性规划是优化问题里最简单的一种形式,需要极大化或极小化的目标函数是线性的,而约束条件由一组线性等式或不等式组成。很多复杂的非线性规划问题都会需要将其转换成线性规划问题来求解。求解线性规划问题最常用的算法是单纯形法(包括了单纯形表、修正单纯形法、对偶单纯形法等),除此之外还有内点法、灵敏度分析等算法。...
2020-02-16 15:29:38 1405
原创 Google OR-Tools(一) Get Start
1 最优问题我们先回顾下最优问题的概念。所谓最优化,就是指在满足某些约束条件的前提下,使得指定的目标函数极大化或极小化的过程。在工业界很多场景都可以归结为一个最优问题,利用合适的最优算法可以极大地提升效率和减小人工成本。通常情况下,现实的优化问题可以抽象为一个非线性规划,即:minimize f(x)subject to gi(x)≤0 i=...
2020-02-15 16:13:11 1740
原创 Drool学习记录(二) Kie Session、Truth maintenance
参考Drools官方文档(3.1 KIE Session和3.2 Inference and truth maintenance in the Drools engine),学习关于Kie Session和Truth maintenace的内容。这两节内容虽然很基础,但是感觉官方文档说的还是不够明了,尤其是Stateless Session和Stateful Session的区别,和insert(...
2020-02-07 23:51:26 459
原创 Drool学习记录(一) 概念、Helloworld
1 关于规则引擎基于知识库和规则的专家系统是早期最主流的人工智能,不同于现在流行的基于统计、机器学习的智能算法,基于规则的算法相对来说更加直观和易于理解,毕竟如果简单理解的话,就是定义好了If-Than结构,从而让不同的输入得到相应的输出。但从现实角度出发,开发基于规则的业务系统很多时候是必须的,因为很多业务场景就是规定好的处理逻辑,比如一款游戏里,使用某个道具后给角色添加哪种效果,就是要用预先...
2020-02-05 14:22:59 1262
原创 树莓派笔记18: Raspberry Pi+Node-Red+OneNET构建简单的物联网系统
最近在物联网领域Node-Red比较火热,Node-Red是一个基于Node.js的图形化程序开发平台,我们可以利用Node-Red快速开发IoT应用。本篇博文利用Node-Red和移动的OneNET平台建立一个简单的物联网系统,部署在树莓派上的Node-Red会读取温湿度数据并上传IoT云进行显示1 用到哪些东西2 OneNET应用配置3 Node-Red应用开发4 监控数据流...
2019-07-23 20:54:38 3932
原创 ASP.NET Core环境Web Audio API+SingalR+微软语音服务实现web实时语音识别
处于项目需要,我研究了一下web端的语音识别实现。目前市场上语音服务已经非常成熟了,国内的科大讯飞或是国外的微软在这块都可以提供足够优质的服务,对于我们工程应用来说只需要花钱调用接口就行了,难点在于整体web应用的开发。最开始我实现了一个web端录好音然后上传服务端进行语音识别的简单demo,但是这种结构太过简单,对浏览器的负担太重,而且响应慢,交互差;后来经过调研,发现微软的语音服务接口是支持流...
2019-07-19 14:11:58 4567 2
原创 Win10更新后无法启用.NET环境
坑爹的win10更新终于给我的电脑更新出毛病来了。。。更新后很多程序无法打开,都报0xc0000135的错误,到网上查查知道这是因为没有启用.NET环境导致的,然后去控制面板打开“启用windows功能”,结果wtf,怎么是这个样子,只显示一个光秃秃的“.NET环境”,正常应该是NET 几点几的呀:点击上".NET环境"启动,发现根本没啥效果。。。去网上搜了半天,终于找到解决方法:1、先以管...
2019-04-08 21:39:52 4937 8
原创 一个用SIFT特征比较图像相似度的python小程序
1 问题描述把一堆图片按照与给出的一张图片的相似度进行排序2 程序可以从图片中提取SIFT特征,对两幅图片的SIFT特征进行匹配并按照一定条件删选就能得到两幅图片的匹配点个数,匹配点个数越多,相似度越高import cv2from matplotlib import pyplot as pltimport numpy as npimport osimport mathdef ...
2018-12-19 19:34:27 14493 23
原创 树莓派笔记15:手机控制树莓派小车
1 成果展示花了点时间做了简单的手机控制树莓派小车项目,其实主要是对之前各种学习内容的一个综合利用,也特地抽出时间学习了一下最基本的Android开发。下面的图片是成果的展示,树莓派小车由树莓派、小车地盘、电机及电机控制模块、摄像头、舵机云台和OLED显示屏等组成,手机端写了一个简单的App,可以控制小车的行进,控制摄像头云台转动,同时可以接收显示摄像头的图像。小车图片: 手...
2018-09-01 12:03:53 26129 13
原创 树莓派笔记14:舵机云台(二) 远程控制云台
前面一篇已经准备好云台控制模块了,接着想实现的效果就是可以远程控制云台动作,比如在笔记本电脑上通过按方向键控制云台进行水平和垂直方向上的转动。1 分析首先考虑用哪种方式与树莓派通信,这里我选择用UDP的方式向树莓派发送控制指令,主要原因是传输过程简单,不需要在通信逻辑上费精力。采用UDP协议的socket,电脑端不停地发控制指令,树莓派则循环接收指令,不需要去建立连接,反正只是近距离测...
2018-05-31 20:26:23 7139 7
Winform下的简易示波器
2017-03-27
winform下可方便使用的加载提示窗口
2017-03-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人