- 博客(115)
- 收藏
- 关注
原创 Drools约束编写(一)
第一个 Drools 程序学习一样新东西的最好的方法就是尝试使用它,下面编写一个简单的 Drools 应用程序。首先,我们需要创建一个 Maven 工程,然后在其 pom.xml 文件添加如下包依赖:<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version&
2022-05-22 22:35:07
388
原创 Maven安装教程配置
本文须知:安装maven环境之前要先安装java jdk环境(没有安装java环境的可以先去看安装JAVA环境的教程)Maven 3.3+ require JDK 1.8 及以上。第一步:下载maven(本教程安装的是3.8.4)官方下载链接:https://maven.apache.org/download.cgi下载完成后进行解压到自己要安装的路径(为避免安装失败建议路径和我的保持一致):第二步maven环境配置(点击此电脑右键属性):点击高级系统设置,点击环境变量:开始配置环境变量(点
2022-05-21 18:04:29
1231
原创 Optaplanner调度优化(2)
“项目”背景与业务规则的分类假如我们接到一个项目,经过需求调研之后,发现其业务逻辑非常简单;但细想一下业务操作却又是异常复杂(先别砸砖,听老农缪缪道来)。它是一个生产计划系统(应该说是一个生产计划辅助系统,毕竟最终的计划,应该是人来决定,而非系统),在没有这个系统之前,计划人员(生产调试员)每天收到需要加工的生产任务之后,根据当时的机台产能情况,将这些待处理的任务合理地分配到适合的机台。对于前面这句对计划制定工作的描述,其实可以细作提练,其隐含了两个意义,分别是“合理地”和分配到“合适的”机台。对于这两个
2022-05-20 15:24:58
394
原创 OptaPlanner调度优化(1)
什么是OptaPlanner其实这个名称是作者将这个引擎贡献给了Jboss社区后,才使用的名,之前叫做Drools planner。没错,它就是结合Drools(一个开源规则引擎)一起应用的(也可以单独使用),Drools在这里的作用主要是用来作编写计分脚本,事实上完全可以抛开Drools,直接使用OptaPlanner自己的API,通过Java代码自己来计分,但这个难度就大得多。详细情况讲到相应的章节再细说。名称的前缀应该是Optimize的词根,或取近音吧,因为OptaPlanner其实就是一
2022-05-20 15:05:58
1156
原创 运筹优化算法问题汇总
运筹优化算法工程师面试问题汇总转发 码丽莲梦露本文对全网的运筹优化算法方向前人的面经中涉及的一些面试问题进行总结,以下涉及到运筹学的大部分知识,主要涉及的问题如下:运筹:1 单纯形法是什么?具体讲解一下单纯形的步骤。Simplex-单纯形算法介绍 | caojiangxia运筹说 第16期 | 线性规划硬核知识点梳理—单纯形法 - 知乎 (zhihu.com)2 列生成?当变量数目大于约束条件数时,需要使用列生成算法,讲解一下列生成算法,列生成算法除了主问题还有子问题,子问题的作用是什么?
2022-04-12 09:09:27
1765
原创 cplex求解5-----求解CVRP问题
接上一篇问题假设有一个单配送中心以及10个客户节点构成的配送系统,在满足载重约束的情况下,计算最少的车辆数和最短的总路径长度,如果用节约里程法进行求解,其算法思想解析如下:1、首先将10个点分别和配送中心连线构成一个环路,计算从配送中心出发到达该点并回到配送中心的总里程。2、然后,从任意点开始,做节点的合并,即将相邻的两个点的两条子路径合并成一条子路径,合并后的环路的总里程一定比原来两条子路径的总里程之和要少,计算减少的里程数。其实也就是得到10个点中任意两个点合并成一条子路径后的节约里程表。3、
2022-04-11 12:22:25
1806
原创 cplex求解4-----求解CVRP问题
节约里程法—单配送中心CVRP求解一、算法思想节约里程法,顾名思义,是根据里程的节约值的大小来规划线路的。假设有一个单配送中心以及10个客户节点构成的配送系统,在满足载重约束的情况下,计算最少的车辆数和最短的总路径长度,如果用节约里程法进行求解,其算法思想解析如下:1、首先将10个点分别和配送中心连线构成一个环路,计算从配送中心出发到达该点并回到配送中心的总里程。2、然后,从任意点开始,做节点的合并,即将相邻的两个点的两条子路径合并成一条子路径,合并后的环路的总里程一定比原来两条子路径的总里程之和要
2022-04-11 12:19:02
1621
原创 cplex求解3-----求解CVRP问题
CVRP指载重量有限的车辆运输问题,从起点出发,到n个点获取物资,然后运回起点,要求运输路径总和最短。导入需要的包import cpleximport docplexfrom docplex.mp.model import Modelimport numpy as nprnd = np.randomrnd.seed(0)import matplotlib.pyplot as plt问题规模n = 10 # 10个装载点Q = 15 # 15个运输点的各自编号N =
2022-04-11 12:05:33
1574
原创 cplex求解2
利用cplex包中的模型求解案例# max 3 * x1 + 5 * x2 + 4 * x3# s.t.# 2 * x1 + 3 * x2 <= 1500# 2 * x2 + 4 * x3 <= 800# 3 * x1 + 2 * x2 + 5 * x3 <= 2000# x1, x2, x3 >= 0导入模型from docplex.mp.model import Modelmodel = Model() #创建模型var_list = [i for
2022-04-11 11:47:19
544
1
原创 cplex求解1
python环境下cplex安装发现了一个简单的方法,直接使用 Anaconda 安装 cplex 包,因为 cplex 把自己最新的 python 包都发到 Anaconda 云里面了。(1)打开 dos 命令行窗口,输入:conda install -c IBMDecisionOptimization docplex cplex或者用 pip 安装:pip install cplex就能直接将 cplex 的库安装好(2) 在 ipython 里面输入 import cplex若加载
2022-04-11 11:42:36
1574
原创 流水线调度问题
分布式流水车间调度问题(Distribute flow shop scheduling problem)例子:3个工作单元,10个工件,4道工序。随机生成数据:工件在工作单元1、2、3机器上的加工时间[array([[30.52, 5.46, 5.74, 5.19],[ 7.31, 29.18, 13.78, 16.88],[30.74, 6.33, 14.47, 25.09],[30.4 , 15.29, 13.66, 18.01],[28.92, 21.26, 30.36, 10.07]
2022-03-07 17:17:30
919
原创 python中zip()内置函数07
描述zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。下面一步步来解析下 zip 干了些什么。In [1]: headerOut[1]: ['a', 'b', 'c']In [2]: valuesOut[2]: [['1', '2', '3'], ['1', '2', '3', '4']]In [3]: zipped = zi
2022-01-21 12:04:22
279
原创 python内部的数据结构
一。概念程序使用数据结构处理数据时,瑰石如何组织和保存在内存中,请注意,存储在磁盘中作为永久性存储(如关系表)的一部分数据,在此处不能被称为数据结构。算法是一步一步来处理特定用途数据的指令集合。因此算法以逻辑方式利用各种数据结构来解决特定的计算问题。数据结构是计算机科学的基本概念。在这里我们了解到一些常用的数据结构的概念,以及它们与某些python数据类型的关系。还有一些特定于python的数据结构,他们将会成为另一个类别。二。一般的数据结构1.线性数据结构(依顺序的方式存储数据元素的数据结构)
2021-11-25 11:39:59
557
原创 算法十一:基数排序
基数排序基数排序算法很特殊,它不需要直接对元素进行相互比较,也不需要将元素相互交换,你需要做的就是对元素进行“分类”。这也是基数排序的魅力所在,基数排序可以理解成是建立在“计数排序”和“桶排序”的基础之上的一种排序算法。在实际项目中,如果对效率有所要求,而不太关心空间的使用时,我会选择用计数排序(当然还有一些其他的条件),或是一些计数排序的变形。基数排序适合于有不同位数的大小数字,例如以下数列:核心思想是:先找十个桶:0~9第一轮按照元素的个位数排序桶内分别存放上述数组元素的个位数,按照数组元
2021-11-16 16:27:19
840
原创 算法十:桶排序
桶排序思想在计数排序中,如果数据范围比较大,如何改进算法?方法是划分多个范围相同的区间,每个子区间自排序,最后合并。桶排序是计数排序的扩展版本,计数排序可以看成每个桶只存储相同元素,而桶排序每个桶存储一定范围的元素,通过映射函数,将待排序数组中的元素映射到各个对应的桶中,对每个桶中的元素进行排序,最后将非空桶中的元素逐个放入原序列中。桶排序需要尽量保证元素分散均匀,否则当所有数据集中在同一个桶中时,桶排序失效。图解过程算法代码def bucket_sort(li, n=100, max_nu
2021-11-16 15:01:19
255
原创 算法九:计数排序
计数排序计数排序不是一个比较排序算法,通过计数将时间复杂度降到了O(n)。算法步骤第一步:找出原数组中元素值最大的,记为max。第二步:创建一个新数组count,其长度是max加1,其元素默认值都为0。第三步:遍历原数组中的元素,以原数组中的元素作为count数组的索引,以原数组中的元素出现次数作为count数组的元素值。第四步:创建结果数组result,起始索引index。第五步:遍历count数组,找出其中元素值大于0的元素,将其对应的索引作为元素值填充到result数组中去,每处理一次,
2021-11-16 14:23:31
493
原创 算法八:希尔排序
希尔排序希尔排序算法也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n^2)的第一批算法之一。本文会以图解的方式详细介绍希尔排序的基本思想及其代码实现。基本思想希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。简单插入排序很循规蹈矩,不管数组分布是怎么样的,依然一步一步的对元素进行比较,移动,插入,比如[5,4,3,2,1,0]这
2021-11-16 10:56:29
67
原创 算法七:归并排序
归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就是递归拆分子序列的过程,递归深度为logn。算法代码"""以下为merge_sort的执行过程merge_so
2021-11-16 10:38:36
562
1
原创 算法六:堆排序
堆排序堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个样子该数组从逻辑上讲就是一个堆结构,我们用简单的公式来描述一下堆的定义就是:大顶堆:arr[i]
2021-11-15 17:21:57
111
原创 算法五:快速排序
快速排序算法的基本思想快速排序是冒泡排序的改进版,也是最好的一种内排序。思想:1.在待排序的元素任取一个元素作为基准(通常选第一个元素,但最的选择方法是从待排序元素中随机选取一个作为基准),称为基准元素;2.将待排序的元素进行分区,比基准元素大的元素放在它的右边,比其小的放在它的左边;3.对左右两个分区重复以上步骤直到所有元素都是有序的。所以我是把快速排序联想成东拆西补或西拆东补,一边拆一边补,直到所有元素达到有序状态。算法代码def partition(li, left, right):
2021-11-15 17:16:11
80
原创 算法四:插入排序
插入排序的整体思路通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。数组分为两部分:有序部分和无序部分。取出无序部分的第一个元素,与有序区部分进行比较,并插入到合适的位置。详细图解通过下图来了解一下整个排序过程吧,现在排序一个乱序数组,如下1、首选取出第一个元素 10,认为10已经是有序的了,进行下一步2、取出元素7,与10进行比较,比10小,交换10和7的位置,进行下一步3、取出元素6,与10进行比较,比10小,交换位置,然后和7进行比较,比7小交换位置,
2021-11-15 16:44:43
193
原创 算法三:选择排序
选择排序选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。算法思想n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。具体算法描述如下:步骤1:将数据分为有序部分和无序部分步骤2:在无序部分找出最小的元素,将最小的元素和无序部分最后一个元素交换,使得无序部分最后一个元素并入有序部分步骤
2021-11-15 16:32:20
220
原创 算法二:冒泡排序
排序:将一组”无序“的记录列表调整为”有序“的列表输入:列表输出:有序列表python内置排序函数sort()冒泡排序冒泡排序思想冒泡排序,类似于水中冒泡,较大的数沉下去,较小的数慢慢冒起来,假设从小到大,即为较大的数慢慢往后排,较小的数慢慢往前排。直观表达,每一趟遍历,将一个最大的数移到序列末尾。冒泡排序算法的原理如下:1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3、针
2021-11-15 15:52:16
150
原创 算法一:列表查找元素
查找:在一些数据元素中,通过一定的方法找出与给定关键字相同的数据元素的过程。列表查找(线性查找):从列表中查找指定元素输入:列表,带查找元素输出:元素下标(未找到元素时返回None或者-1)内置列表查找函数:index()1、顺序查找def linear_search(li, val): for index, v in enumerate(li): if v == val: return index else: print(
2021-11-15 15:41:00
1622
原创 时间复杂度
时间复杂度:用来评估算法运行效率的一个式子。举例print("Hello World")时间复杂度为O(1)for i in range(n): print("Hello World") 时间复杂度为O(n)for i in range(n): for j in range(n): print("Hello World")时间复杂度为O(n*n)for i in range(n): for j in range(n): for k in range(n): pr
2021-11-15 15:19:51
160
原创 算法与数据结构
1.几个概念1.1算法的概念先总结:五大特性–输入、输出、有穷、确定、可行。算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务。一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址供以后再调用。算法是独立存在的一种解决问题的方法和思想。对于算法而言,实现的语言并不重要,重要的是思想。算法可以有不同的语言描述实现版本(如C描述、C++描述、Python描述等),我们现在是在用Python语言进行描述实现
2021-11-15 15:17:18
1028
原创 基于ESB的系统集成
随着企业信息化程度的不断提高,越来越多的信息系统逐渐上线,这些系统在为企业带来效益的同时,也带来了一些让开发及维护人员头痛不已的问题,主要表现在系统分散,信息孤岛,交互复杂,维护成本太高。假设现在有A、B、C、D、E、F、G 7个业务系统。各系统均为独立的业务系统,系统的开发语言、所使用的数据库、所需要的运行环境也不尽相同。有些为自主开发,有些为外部采购。根据业务需求各系统间需要有各式的数据交互。为了更加直观,现将其假设为华信内部常用的系统名称。(实际上公司内部的系统要远远多于上述内容,并且关系更
2021-09-18 14:04:04
1154
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人