
Intelligence Solution
文章平均质量分 89
专家系统、优化问题、机器学习相关
皇家园林巡游者
。。。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
关于博弈论的一点笔记
最近稍微了解了一下博弈论的一些基本概念,它本身是运筹学的一个分支,同时在经济学领域也是非常重要的一个科目,小到游戏设计,大到经济政治,很多案例都可以用博弈论的理论进行设计或者解释;博弈论的理论大都非常有意思甚至反直觉,了解博弈论的一些概念后可以帮助我们从更高的维度去看待生活中的一些事情;另一方面博弈论从数学上看其实还是属于优化问题,我们也可以从运筹优化的角度去理解博弈论的一些理论。这篇文章里我就摘录一些博弈论的概念,加上一点我自己的理解,当然作为非专业人士,可能有些理解偏差。零和博弈博弈论的英文名是Ga原创 2021-05-14 16:09:51 · 3563 阅读 · 0 评论 -
非线性优化问题处理技术(一) 拉格朗日乘子
拉格朗日条件定义映射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 · 2320 阅读 · 0 评论 -
求解分配问题(三) 二分图最小权重匹配
ddd原创 2021-03-22 13:36:04 · 5781 阅读 · 2 评论 -
求解分配问题(二) 二分图最大匹配算法
我的前一篇文章介绍了对于分配问题的Kuhn-Munkre算法,该算法其实可以看作是邻接矩阵形式的匈牙利算法,如果更抽象地看这个算法,它可以看成是一个二分图匹配算法的变体算法,具体的说,是二分图最大权重匹配算法。我打算也把二分图最大权重匹配算法也介绍下,不过最大权重匹配算法又是基于最大匹配算法设计的,所以这篇文章先介绍二分图的最大匹配算法二分图最大匹配问题分配问题从图论的角度看其实是一个二分图(Bipartite Graph),就是说图中有两个点集,在各自的点集内的点互相没有连接,两个点集间的点可以连接,原创 2021-03-18 18:19:15 · 1985 阅读 · 2 评论 -
求解分配问题(一) Kuhn-Munkre算法
分配问题(Assignment Problem)很常见,例如给多个开发者安排开发任务,一个开发者只能分配到一个任务,一个任务也只能由一个人完成,不同的人对不同的任务有不同的完成时间,那么如何进行安排使得总的开发时间最短就是一个典型的分配问题。如果说传输问题是一类特殊的线性规划问题(传输问题定义),那么分配问题则是一类特殊的传输问题,如果我们把传输问题中所有Supplier和Demander的供应量或需求量都降到1,那么这就变成了一个分配问题既然分配问题属于传输问题,那么Stepping-Stone算法或者原创 2021-03-18 15:02:35 · 6474 阅读 · 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 · 469 阅读 · 0 评论 -
求解传输问题(五) 特殊情况处理
正如在应用单纯形算法时需要注意处理一些特殊情况一样,计算TP问题时也需要考虑到下面的特殊情况;这里我们还是使用前面的例子进行说明:三个Supply结点,其供应量为:仓库库存(Supply)1. 堪萨斯1502. 奥马哈1753. 得梅因275Total600三个Demand结点,其需求量为:面粉厂需求(Demand)A. 芝加哥200B. 圣路易斯100C. 辛辛那提300Total600路径的单位原创 2021-02-08 14:00:07 · 384 阅读 · 0 评论 -
求解传输问题(四) 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 · 918 阅读 · 0 评论 -
求解传输问题(三) 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 · 1166 阅读 · 0 评论 -
求解传输问题(二) 初始化算法
这篇文章介绍两种TP问题的初始化算法:Northwest-Corner和Minimum-Cell-Cost算法还是用前一篇文章中的案例作为例子:三个Supply结点,其供应量为:仓库库存(Supply)1. 堪萨斯1502. 奥马哈1753. 得梅因275Total600三个Demand结点,其需求量为:面粉厂需求(Demand)A. 芝加哥200B. 圣路易斯100C. 辛辛那提300Total600原创 2021-02-07 17:11:34 · 680 阅读 · 0 评论 -
求解传输问题(一) 传输问题定义
传输问题(Transportation Problem)是一类特殊的线性优化问题,它要解决的是如何安排从不同供应者到需求者的物品数量,来让总的传输成本最小。传输问题最早由 F.L.Hitchcock 在1941年首次提及,由 T.C.Koopmans 在1947年将该问题独立出来,直到1951年由 G.B.Dantzig 运用单纯形算法成功求解;之后各种改善的算法被发明,并且大规模应用于实际的传输问题。我们可以举一个典型的实例进行说明:假设在堪萨斯城(111),奥马哈(222)和得梅因(333)三座城市原创 2021-02-07 13:54:11 · 1335 阅读 · 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 · 542 阅读 · 0 评论 -
单纯形算法 Simplex Algorithm (二)
为了真正理解单纯形算法的具体步骤,我查阅了许多文章,不过大部分文章会直接叙述单纯形表的操作,对理解算法帮助有限;也有一些文章直接从线性代数上的原理开始叙述,对于非专业人士又太难了。所幸我找到了一个挺不错的在线课程,感觉是我看过叙述单纯形算法最明了直观的资料了,下面的内容主要就是对这个课程的翻译初始可行解我们直接就用个例子来叙述算法。还是上一篇的例子:maxZ=40x1+50x2s.t.x1+2x2≤404x1+3x2≤120x1,x2≥0\begin{aligned}max\quad& Z原创 2021-01-18 15:39:49 · 753 阅读 · 0 评论 -
单纯形算法 Simplex Algorithm (一)
单纯形算法是求解线性规划问题最经典的方法,在许多介绍该算法的文章中会使用单纯形表(Tableau)辅助计算,而对Tableau进行的操作本质上都是在对松弛化的线性规划模型进行矩阵运算,从几何表现上看,就是在线性规划问题的定义域上的顶点中迭代搜索,寻找使得目标函数最优的那个顶点。使用Tableau计算虽然很高效,不过对于理解算法原理帮助不大;单纯形算法的原理是基于线性代数的,如果要彻底理解,还是需要很多基础的矩阵知识的。这篇文章里我只是记录和单纯形算法相关的线性代数知识,加深对该算法中一些术语的记忆和理解;算原创 2021-01-15 09:30:44 · 3499 阅读 · 0 评论 -
分支界定算法实践(三) 精确求解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 · 3219 阅读 · 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 · 2197 阅读 · 1 评论 -
分支界定算法实践(一) 求解线性整数优化问题
(本文内容主要参考《an introduction to management science(13e)》中的章节)分支界定算法的主要思想是把问题的可行解划分为多个子集,对子集进行系统化的评估直到最优解找到。分支界定只是一种算法框架,因为如何构造子集、在每个子集如何搜索最优解可以按不同情况有不同的具体实现,当用于求解线性整数优化问题时,就需要结合一般的线性优化算法或者求解器来实现。下面先用一个实例来说明算法的思路,然后用代码实现一下。...原创 2020-10-28 09:29:42 · 1312 阅读 · 1 评论 -
Job Shop Schedule 生产调度问题 (一) 简介
生产调度问题(Job Shop Schedule Problem)是一个非常经典的组合优化问题,在生产制造、项目管理的计划排班上广泛存在;学界对这个课题的研究已经超过50年了,建立了各种理论模型并提出了多种算法,应该说该问题属于最难处理的组合优化问题之一,一方面实际的业务逻辑会相当复杂,学界讨论的很多表现良好模型太过理想化,不太好直接应用到实际,另一方面问题规模的扩大很容易引起计算量的指数增长,无论采用哪种算法都不可能完全解决性能问题。我们先通过一个简单直观的例子来了解JSP的概念。假设某个工厂每天需要生原创 2020-10-13 20:08:52 · 17747 阅读 · 3 评论 -
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 · 1321 阅读 · 0 评论 -
Google OR-Tools(六) 装箱问题 Bin Packing
本文参考Google OR-Tools官网文档介绍OR-Tools的使用方法。装箱问题的描述是要将一组给定尺寸的物品放置到具有固定容量的容器中,一般情况下由于容器有容量限制,不可能放入所有物品,那么装箱问题的目标是要找到限定约束下使得总价值最大或总花费最小的装箱方法。根据我们具体的目标情况,装箱问题又可分为两类:背包问题(Knapsack problem),容器数量是固定的,每个容器有自己的...原创 2020-03-07 18:12:58 · 5443 阅读 · 3 评论 -
Google OR-Tools(五) 路径问题 Routing
本文参考Google OR-Tools官网文档介绍OR-Tools的使用方法。实际生活中有很多组合优化问题,例如最短路径、背包问题、人员排班等,这些组合优化问题一般属于规模较大的整数规划或者约束满足问题,一般没有直接的算法获得绝对最优解,只能通过启发式或元启发式算法获得相对最佳解。OR-Tools针对路径问题、背包问题和流问题提供了专用接口,相对于通用的求解器有更高的计算效率。1 TSP问题路...原创 2020-02-23 17:35:28 · 2496 阅读 · 0 评论 -
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 · 5881 阅读 · 0 评论 -
Google OR-Tools(三) 整数优化Integer Optimization
本文参考Google OR-Tools官网文档介绍OR-Tools的使用方法。1 整数规划很多实际问题的变量不能是小数,比如指派多少人员、调度的航班数、分配的机器数等等,我们称这种问题为整数规划,更特殊的,如果要求变量只能取0或1,则称为0-1规划;还有些情况是部分决策变量是整数,其他可以是小数,则称其为混合整数规划。虽然我们可以用线性函数来表示目标和约束,但是有了变量必须是整数的约束,可行域...原创 2020-02-17 15:16:08 · 3359 阅读 · 0 评论 -
Google OR-Tools(二) 线性优化Linear Optimization
本文参考Google OR-Tools官网文档介绍OR-Tools的使用方法。1 线性规划问题线性规划是优化问题里最简单的一种形式,需要极大化或极小化的目标函数是线性的,而约束条件由一组线性等式或不等式组成。很多复杂的非线性规划问题都会需要将其转换成线性规划问题来求解。求解线性规划问题最常用的算法是单纯形法(包括了单纯形表、修正单纯形法、对偶单纯形法等),除此之外还有内点法、灵敏度分析等算法。...原创 2020-02-16 15:29:38 · 1534 阅读 · 0 评论 -
Google OR-Tools(一) Get Start
1 最优问题我们先回顾下最优问题的概念。所谓最优化,就是指在满足某些约束条件的前提下,使得指定的目标函数极大化或极小化的过程。在工业界很多场景都可以归结为一个最优问题,利用合适的最优算法可以极大地提升效率和减小人工成本。通常情况下,现实的优化问题可以抽象为一个非线性规划,即:minimize f(x)subject to gi(x)≤0 i=...原创 2020-02-15 16:13:11 · 1856 阅读 · 0 评论 -
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 · 518 阅读 · 0 评论 -
Drool学习记录(一) 概念、Helloworld
1 关于规则引擎基于知识库和规则的专家系统是早期最主流的人工智能,不同于现在流行的基于统计、机器学习的智能算法,基于规则的算法相对来说更加直观和易于理解,毕竟如果简单理解的话,就是定义好了If-Than结构,从而让不同的输入得到相应的输出。但从现实角度出发,开发基于规则的业务系统很多时候是必须的,因为很多业务场景就是规定好的处理逻辑,比如一款游戏里,使用某个道具后给角色添加哪种效果,就是要用预先...原创 2020-02-05 14:22:59 · 1305 阅读 · 0 评论 -
ASP.NET Core环境Web Audio API+SingalR+微软语音服务实现web实时语音识别
处于项目需要,我研究了一下web端的语音识别实现。目前市场上语音服务已经非常成熟了,国内的科大讯飞或是国外的微软在这块都可以提供足够优质的服务,对于我们工程应用来说只需要花钱调用接口就行了,难点在于整体web应用的开发。最开始我实现了一个web端录好音然后上传服务端进行语音识别的简单demo,但是这种结构太过简单,对浏览器的负担太重,而且响应慢,交互差;后来经过调研,发现微软的语音服务接口是支持流...原创 2019-07-19 14:11:58 · 4923 阅读 · 2 评论