【0】Li X, Gao L. An effective hybrid genetic algorithm and tabu search for flexible job shop scheduling problem. International Journal of Production Economics. 2016;174:93-110. doi:10.1016/j.ijpe.2016.01.016
柔性作业车间调度问题(FJSP)是经典作业车间调度问题的扩展,是现代制造系统中一个非常重要的问题。它允许一个操作被给定集合中的任何机器处理。它已被证明是一个NP-hard问题。本文以最大完工时间最小化为目标,提出了一种有效的混合算法(HA),该算法将遗传算法(GA)和禁忌搜索算法(TS)相结合。利用具有强大全局搜索能力的遗传算法进行搜索,利用具有良好局部搜索能力的TS进行开发。因此,本文提出的HA具有很好的搜索能力,能够很好地平衡集约化和多样化。为了有效地求解FJSP问题,该方法采用了有效的编码方法、遗传算子和邻域结构。使用FJSP的六个著名的基准实例(包括201个开放问题)来评估所提出的HA的性能。还提供了所提出的HA和其他最新报告算法之间的比较,以显示所提出方法的有效性和效率。并与其他算法的计算时间进行了比较。实验结果表明,在不考虑求解精度和计算时间的情况下,所提出的HA在求解FJSP方面取得了显著的进步。并对若干基准问题给出了新的最优解。
原文 | 中文 |
---|---|
Flexible job | 柔性作业车间调度 |
Hybrid algorithm | 混合算法 |
Makespan | 最大完工时间 |
Genetic algorithm | 遗传算法 |
Computational time | 计算时间 |
生产调度是现代制造系统计划调度中最重要的问题之一(Chen et al, 1999)。生产调度优化技术可以通过消除或减少调度冲突、减少流程时间和在制品时间、提高生产资源利用率和适应不规律的车间扰动,显著提高制造设施的效率。在制造系统中有几种车间格调(包括作业车间调度问题,JSP) (Wang and Cheng, 2015;Liou and Hsieh, 2015)。经典的JSP问题是该领域最困难的问题之一,已被证明是NP-hard问题(gray et al, 1976)。假设每个作业的每个操作都没有灵活性的资源(包括机器和工具)。它可以满足传统制造系统的要求。然而,在现代制造企业中,为了提高生产效率,引入了许多柔性制造系统和数控机床(Seebacher and Winkler, 2014)。这些系统和机器可以处理几种类型的操作。这意味着假设一台机器只处理一个类型的操作在JSP不能匹配这种情况。在这种情况下,柔性作业车间调度问题(FJSP)越来越受到研究人员和工程师的关注(Chaudhry和Khan, 2016)。
笔记:
介绍背景,从JSP问题着手分析其是np-hard问题,并根据显示情况,引出FJSP。**
FJSP是经典JSP的扩展,它允许给定集合中的任何机器处理一个操作。FJSP可以分解为两个子问题:机器选择问题(MS)和操作排序问题(OS)。JSP只包含操作系统问题。因此,在相同的规模下,FJSP比JSP更复杂。所以它也是NP-hard问题。在Brucker和Schile(1990)于1990年首次提出这个问题之后,已经提出了许多方法来解决这个问题。
目前求解FJSP的方法主要有精确算法、调度规则、进化算法(EA) ,基于群体智能(SI)的方法,局部搜索(LS)算法等。FJSP的研究成果也被用于一些实际应用中。
每种算法都有自己的优点。然而,它也缺乏一些能力。没有一种算法能够解决基于no Free Lunch定理的所有类型的优化问题(Wolpert And Macready, 1997)。为此,本文提出了一种将全局搜索和局部搜索相结合的混合算法(HA),利用遗传算法(GA)进行搜索,利用引导LS算法(禁忌搜索,TS)进行开发。遗传算法具有强大的全局搜索能力,而TS算法具有宝贵的局部搜索能力。该方法结合了遗传算法和TS算法的优点。因此,它具有非常有效的搜索能力,能够很好地平衡集约化和多样化。为了有效地求解FJSP问题,该方法采用了有效的编码方法、遗传算子和邻域结构。使用FJSP的6个著名的基准测试实例(包括201个开放问题)来评估所提出的HA的性能。通过实验研究,可以清楚地证明该方法的优点。
本文的其余部分结构如下。第2节介绍了文献综述。问题的表述将在第3节讨论。第4节提出了基于ha的FJSP方法。实验研究报告在第5节。第6节描述了结论和未来的工作。
笔记:
提出解决FJSP问题的痛点,引出本文的算法,结合了遗传算法和TS算法的优点,并说明验证其有效性
所报道的FJSP方法可以分为两类。第一个是精确法,另一个是近似法。精确方法包含数学规划(MP)方法。该近似方法包含一些调度规则和基于人工智能的方法。
然而,精确的算法对于解决大规模的FJSP实例(操作总数超过200)是无效的(Pezzella et al, 2008)。因此,目前大多数关于FJSP的方法都集中在近似方法上,包括调度规则和基于人工智能的方法。
因此,FJSP的许多方法都是基于人工智能的方法,如人工免疫算法,滤波光束搜索、差异搜索、和谐搜索,进化算法(EA),基于群体智能(SI)的方法,局部搜索(LS)算法,混合算法(HA)等。
进化算法(EA)是一种有效的元启发式方法,包括遗传算法(GA)、遗传规划、进化策略和进化规划。
Jensen(2003)考虑了FJSP健壮和灵活的解决方案问题。Ho等人(2007)提出了FJSP学习和进化的架构,称为可学习遗传架构(LEGA)。
Pezzella等人(2008)开发了一种遗传算法,该算法集成了产生初始种群、选择繁殖个体和繁殖新个体的不同策略,以解决FJSP问题。
Giovanni and Pezzella(2010)提出了一种改进的遗传算法来解决分布式FJSP问题。
Zhang等(2011)提出了一种针对FJSP的改进遗传算法,并取得了良好的效果。
Chen等(2012)开发了一种基于遗传算法和分组遗传算法的FJSP算法。
蒋和林(2013)提出了一种多目标EA,该EA利用了有效的遗传算子,并仔细保持了多目标FJSP的种群多样性。
Xiong et al .(2013)提出了一种多目标EA,用于具有随机机器故障的FJSP鲁棒调度。
Demir和Isleyen(2014)开发了一种有效的遗传算法,用于操作重叠的FJSP。
Driss等人(2015)开发了一种遗传算法,该算法采用了一种新的染色体表示和一些不同的FJSP交叉和突变策略。但是,它在MK01问题上的实验结果是错误的。作者还将提议的遗传算法应用于一家制药公司。
上述已发表的研究表明,ea具有强大的全局搜索能力,对调度问题是有效的。然而,由于缺乏邻域搜索程序,它们不具备良好的局部搜索能力。它们可以通过与其他本地搜索算法相结合而得到改进。
群智能(Swarm intelligence, SI)方法是另一种有效的元启发式方法,包括蚁群优化(ant colony optimization, ACO)算法、粒子群优化(particle Swarm optimization, PSO)算法和人工蜂群(artificial bee colony, ABC)算法等。蚁群算法擅长解决一般和组合优化问题(Girish and Jawahar, 2009)。
局部搜索(LS)方法包括禁忌搜索(TS)、模拟退火(SA)、变邻域搜索(VNS)等。其有效性主要取决于邻域结构的设计。由于它的特性,它是解决调度问题最有效的方法之一。Hurink等(1994)采用TS技术求解FJSP。Peres和Paulli(1997)开发了一个TS来解决FJSP。Mastrolilli和Gambardella(2000)提出了一种具有两个有效邻域函数的TS程序来求解FJSP,并获得了良好的结果。Bozejko等人
(2010)提出了一种并行的双级元启发式方法,该方法基于在更高级别上实现的两种方法:TS和基于人口的方法。
VNS是一种著名的元启发式算法,已成功地应用于求解多个优化问题。
基于以上分析,大多数LS方法都是基于单点的方法。这一特点使得它们缺乏全局搜索能力。因此,它们应该与其他全局搜索算法相结合。
一些研究者也尝试将几种算法混合在一起,构建一些有效的FJSP混合算法(HA)。
综上所述,不同的算法各有优缺点。表1分析了为FJSP开发的不同算法(包括MP、dr、EA、SI、LS和HA)的特性(Chaudhry and Khan, 2016)。研究应根据不同算法的特性开发出有效的方法。在分析上述方法的基础上,本研究提出了一种新的基于ha的FJSP方法。
有一组 n n n 个工件 J = { J 1 , J 2 , J 3 , … , J n } J= \left\{ J_1, J_2, J_3,…,J_n \right\} J={ J1,J2,J3,…,Jn} 和一组 m m m 台机器 m = { M 1 , M 2 , M 3 , … , M m } m= \left\{ M_1, M_2, M_3,…,M_m\right\} m={ M1,M2,M3,…,Mm} 。每个工件 J i J_i Ji 由一系列工序 { O i 1 ; O i 2 ; O i 3 ; . . . ; O i n i } \left\{ O_{i1};O_{i2};O_{i3};...;O_{in_i} \right\} { Oi1;Oi2;Oi3;...;Oini} 组成。其中 n i n_i ni 是 J i J_i Ji 所包含的工序的个数。
每个工序 O i j ( i = 1 , 2 , … , n ; j = 1 , 2 , … , n i ) O_{ij} (i=1,2,…,n; j=1,2,…,n_i) Oij(i=1,2,…,n;j=1,2,…,ni) 必须由一组给定机器 M i j ∈ M M_{ij} ∈M Mij∈M 中的一台机器来处理。
为了满足要求,问题是既要确定分配机器,又要确定机器上的一系列工序。
它包含两个子问题:机器选择(MS)问题和工序排序(OS)问题。
因此,FJSP比传统的JSP更加复杂和具有挑战性,因为它需要从一组可用的机器中正确选择一台机器来处理每个作业的每个操作(Ho et al, 2007)。
本文的调度目标是使所有作业的最大完成时间最小,即makespan。FJSP的数学模型可参考Ozguven et al .(2010)和Roshanaei et al .(2013)。本文考虑的假设总结如下:
本文提出的HA混合了遗传算法和LS算法(TS)。然而,设计HAs的方法有很多种。本文将TS算法引入到遗传算法的局部搜索过程中。提出的HA工作流程如图1所示。建议方法的整体程序如下:
染色体对应于FJSP的解。
在遗传算法中,个体的编码是非常重要的。本文采用Gao et al .(2006)的编码方法。
因为FJSP包含两个子问题,所以染色体包含两个字符串。第一个是OS字符串第二个是MS字符串。它们有不同的编码方法。
这种表示使用无分区排列,作业号重复次数为1次( O n i O_{n_i} Oni 是 job i i i 的总操作次数)。在这种表示中,每个作业号在OS字符串中出现 O n i O_{n_i} Oni 次。通过从左到右扫描操作系统字符串,作业号的第 f f f 次出现表示该作业的第 f f f 次操作。
这种表示的重要特征是OS字符串的任何排列都可以解码为可行的解决方案。
假设有 n n n 个作业,OS字符串的长度等于 ∑ i = 1 n O n i \sum_{i=1}^{n} O_{n_i} ∑i=1nOni。初始OS种群根据编码原理随机生成。
它包含 n n n 个部分,第 i i i 部分的长度是 O n i O_{n_i} Oni。该字符串的第一部分表示作业 i i i 对应操作的选择机器集。该字符串中的每个基因表示固定操作的选择机器。在整个搜索过程中,操作号不会改变。假设作业 i i i 的第 h h h 次操作可以由一台机器来处理 S i , h = { m i , h 1 , m i , h 2 , . . . , m i , h C i h } S_{i,h}=\left\{m_{i,h1},m_{i,h2},...,m_{i,hC_{ih}} \right\} Si,h={ mi,h1,mi,h2,...,mi,hCih};
例如,MS字符串的第1部分可以表示为 { g i 1 , g i 2 , . . . , g i h , . . . , g i O n i } \left\{g_{i1},g_{i2},...,g_{ih},...,g_{iO_{ni}} \right\} { gi1,gi2,...,gih,...,giOni},其中 g i h g_{ih} gih是 1 1 1到 c i h c_{ih} cih 之间的整数,表示作业i的第 h h h次操作被分配给 S i h S_{ih} Sih中的第 g i h g_{ih} gih台机器 m i h g i h m_{ihg_{ih}} mihgih。初始MS字符串为由每个作业的每个操作随机选择备用机器生成。图2提供了一个示例。
笔记:
OS字符串解析:
上文提到的作业号是什么?每个工件的都有一定的工序,并且有一定的先后顺序,因为图中给的每个job都有2个工序,所以,对于每一个工件来说都有2个与其相同的数子,比如我这有 n n n 个工件,每一工件有2个工序,那么我的OS字符串的长度为 2 n 2n 2n个,那么我的OS字符串就是包含 { 1 , 1 , 2 , 2 , 3 , 3 , . . . , n , n } \left\{1,1,2,2,3,3,...,n,n\right\} {
1,1,2,2,3,3,...,n,n}组成,并每个所在位置是随机的。
MS字符串解析:
与上面的OS字符串有相同的长度,但是具有了位置关系,由于每一工件有2个工序,所以,这个集合就2个位置一组,并且表示的是,第几个组(当前字符串位置2,就是第几个工件),(当前字符串位置%2,就是该工件的第几道工序),所在的位置的字符串表示,这个工序使用第几个机器。
总结:
一个解决方案由一个OS字符串和一个MS字符串组成。解决方案可以分为半主动、主动、非延迟和混合调度。(The solutions can be decoded into semi-active, active, non-delay, and hybrid schedules.)因为完工时间是一个规则的标准,所以这里采用活动进度。用于解释解码过程的符号如下:
字符 | 描述 |
---|---|
n n n | 作业总数 |
m m m | 机器总数 |
o i j o_{ij} oij | 第 i i i 个工件的第j个工序 |
a s i j as_{ij} asij | 操作 o i j o_{ij} oij的允许开始时间 |
s i j s_{ij} sij | 操作 o i j o_{ij} oij的最早开始运行的时间 |
k k k | 为 o i j o_{ij} oij对应的替代机器 |
t i j k t_{ijk} tijk | 在机器 k k k上工序 o i j o_{ij} oij的处理时间 |
c i j c_{ij} cij | 操作 o i j o_{ij} oij最早完成时间,即 c i j = s i j + t i j k c_{ij}=s_{ij}+t_{ijk} cij=sij+tijk |
解码过程如下:
由上式可得,每个作业的每道工序的开始时间和完成时间集合。这是车间的时间表。
图2示出编码和解码方法的示例。
备注疑惑点:上图的MS String 我认为应该是 2 1 3 1 2 3 才会画出Decoding的图????????????
图2(a)显示了本例的数据。
它包含3个作业和3台机器(每个作业包含2个操作)。图2(b)显示一条染色体。它包含两个字符串。OS字符串是具有重复作业号的未分区排列。因为有3个作业,每个作业包含2个操作,所以OS字符串是由两个1、两个2和两个3组成的排列。它的长度是6。
MS字符串包含3个部分,因为有3个作业。它的长度也等于6。每一部分表示所选择的机器每个作业对应的操作。例如,第一部分表示作业1的相应操作所选择的机器。第一个基因表示从S11中为O11选择的机器。第三个基因表示从S21中选择的机器用于O21。这个字符串中的每个基因都表示进行固定操作的选定机器。在整个搜索过程中,操作号不会改变。因此,如果亲代是可行的,这种表示可以保证后代是可行的。
图2(b)中的染色体(包含一个OS字符串和一个MS字符串)可以解码为图2(c)所示的时间表。
使用好的遗传算子来有效地处理问题,并在种群中高效地生成优秀的个体是非常重要的。遗传算子一般可分为三类:选择、交叉和突变。在本文中,染色体包含两个字符串:OS字符串和MS字符串。每个字符串都有自己的遗传操作符。
在遗传算法中,选择算子根据适应度选择个体。本文采用了两种选择算子。
在本文中,对OS字符串采用了两个交叉算子。在HA过程中,随机选择一个交叉操作符(50%)来交叉OS字符串。
第一个是优先操作交叉(POX)。POX的基本工作流程描述如下(双亲分别记为P1和P2;两个子代分别记为O1和O2):
OS字符串的第二个交叉操作符是基于作业的交叉(JBX)。JBX的基本工作流程描述如下(双亲分别记为P1和P2;两个子代分别记为O1和O2):
对于OS字符串,图3(a)显示了POX交叉操作符的示例,图3(b)描述了JBX交叉操作符的示例。
笔记:
优先操作交叉(POX):
上文提到了2个集合, Jobset1 = { 2 } =\left\{2\right\} ={
2}和 Jobset2 = { 1 , 3 } =\left\{1,3\right\} ={
1,3},我们将P1中的 Jobset1元素直接放到 O 1 O1 O1的相应位置,然后把P2只有Jobset2的插空放到 O 1 O1 O1 中;
O 2 O2 O2 同理,把P2中的 Jobset1元素直接放到 O 2 O2 O2 的相应位置,然后把P1只有Jobset2的插空放到 O 2 O2 O2 中
基于作业的交叉(JBX):
上文提到了2个集合, Jobset1 = { 2 } =\left\{2\right\} ={
2}和 Jobset2 = { 1 , 3 } =\left\{1,3\right\} ={
1,3},我们将P1中的 Jobset1元素直接放到 O 1 O1 O1的相应位置,然后把P2只有Jobset2的插空放到 O 1 O1 O1 中;
O 2 O2 O2 ,把P2中的 Jobset2元素直接放到 O 2 O2 O2 的相应位置,然后把P1只有Jobset1的插空放到 O 2 O2 O2 中
对于MS字符串,这里采用两点交叉作为交叉算子。在这个算子中,选择了两个位置一开始是随机的。然后通过在两个父字符串的位置之间交换所有元素来生成两个子字符串。由于该字符串中的每个基因都表示进行固定操作所选择的机器,因此在整个搜索过程中,操作编号不会发生变化。如果选择的亲本是可行的,这种交叉可以确保产生可行的后代。图4显示了用于MS字符串的交叉操作符的示例。首先,选择两个可行的亲本(P1和P2);然后,随机选择两个位置,在本例中,选择第2和第5个位置;取P2第2位之前的元素,取P1第2位之前的元素,取P1第5位之前的元素,取P1第5位之前的元素,取P1第5位之前的元素,取P1第5位之前的元素,取P1第5位之前的元素,取P1第5位之前的元素,取P1第5位之前的元素,取P1第5位之前的元素,取P1第5位之前的元素,取P2第3位之前的元素,取P2第3位之前的元素,取P2第4位之前的元素用同样的过程生成O2。基于整个过程,我们可以看到,如果父母双方都是可行的,那么后代将是可行的。
笔记:
就是 P 1 P1 P1与 P 2 P2 P2 的2个基因片交换变成 O 1 O1 O1 和 O 2 O2 O2。
本文对OS字符串采用了两种变异算子。在HA过程中,随机选择一个变异算子(50%)对OS字符串进行变异。
笔记:
交换突变:
任意选择2个数惊醒交换,不一定是不同的,相同的也可。
邻域变异法:
上文选择这些元素的值不同,交换,可以共出现6种基因型
对于OS字符串,图5(a)显示了交换突变算子的示例,图5(b)描述了邻域突变算子的示例。在图5(a)中,选择第2和第5个位置。后代是通过交换这些位置上的元素而产生的。在图5(b)中,选择了第1、4、6个位置。然后,生成5个邻域OS字符串,随机选择其中一个作为后代。
对于MS字符串,变异操作符设计如下:
图6显示了MS字符串的突变操作符的示例。
在本例中,r = 3(长度为6),选择第1、4和6个位置。它们分别代表O11、O22和O32所选择的机器。后代是通过将这些位置的值改变为相应操作的机器集中的另一台机器而产生的。
禁忌搜索(Glover and Laguna, 1997)是一种元启发式方法,已成功地应用于各种组合优化问题,包括一些调度问题。TS允许搜索过程探索不降低目标函数值的解,如果这些解不被禁止的话。它通常是通过跟踪将一个解转换为另一个解所使用的动作来获得的。它由几个元素组成,其中包含邻域结构,移动属性,禁忌列表,期望标准和终止标准。
TS已成为解决调度问题的最有效的LS策略之一。在本研究中,它被作为LS策略用于FJSP的HA。这里采用了Mastrolilli和Gambardella(2000)提出的邻里结构。这种邻里结构被证明是最优连接的(Mastrolilli and Gambardella, 2000)。TS的基本流程如图7所示。
TS的总体流程说明如下:
在建议的HA中,当个体执行LS时,首先应将其转换为可行的调度方案。然后将该解作为TS的初始解,经过局部搜索后,将TS的输出解编码为可行的染色体供遗传算子使用。
在本文中,当代数达到最大值(maxGen)或允许的最大步长(maxStagnantStep)且没有改进时,HA终止;当迭代次数达到最大大小(maxTSIterSize)时,TS终止。
1. 与其他算法的比较结果:
2. 原因:
本文将遗传算法基于种群的进化搜索能力与遗传算法的局部改进能力相结合,平衡了遗传算法的探索和开发,提出了一种以最大完工时间最小为目标的高效HA算法。
已经使用了六个著名的基准测试实例(包括201个开放问题)来测试HA的性能。实验结果表明,在不考虑求解精度和计算时间的情况下,所提出的HA在求解FJSP方面取得了显著的进步。并对若干基准问题给出了新的最优解。
本研究的贡献包括:
在未来,可以做以下工作。首先,我们可以将进化算法中的其他算法与其他LS方法相结合,构建更有效的混合算法来解决调度问题。毕竟,一些基准测试实例并没有找到最优的解决方案。目前的方法还远远不够。其次,该算法可以有效地解决单目标FJSP问题。将该方法与一些处理多目标问题的方法相结合,可以扩展其应用范围,用于解决制造领域的多目标FJSP或其他调度问题。
文章浏览阅读3.6k次,点赞6次,收藏12次。找不到wifi,提示适配器的驱动程序可能出现问题_xioami 802.11n usb wireless adapter 驱动错误
文章浏览阅读1.4w次。在 1950、1960 年代,早期 AI 研究者们开发了一系列实验项目,如西蒙和纽埃尔的逻辑理论机(Logic Theorist)、麦卡锡的 Lisp 语言和明斯基的微世界(Micro World)等。总的来说,从 20 世纪 40 年代末到 50 年代的 AI 理论形成和发展过程,为后续的 AI 研究和应用奠定了坚实的基础。在本章中,我们将分析第一个 AI 研究的黄金时代,探讨其重要突破和成就,以及此阶段对 AI 发展历程产生的长远影响。这些算法穿插在人工智能的各个领域,推动着技术的创新与突破。
文章浏览阅读298次。一、场景说明: 虚拟软件使用VirtualBox,虚机操作系统使用CentOs7.3, 最小化安装后在虚机里面安装增强工具。 二、安装方法: 首先要先安装图形界面不然..._vboxwindowsadditions-amd64.exe下载
文章浏览阅读227次。执行上面的测试代码,发现使用 32 位的 JDK 通过配置的 testodbc 数据源 (32 位的驱动程序)能够正常的连接到 64 位的数据库,如下图所示。 这个场景并不完全真实,只是我个人的一个联想和猜测,中间极有可能出 现不正确或不完整的......在 face.h 的头文件中包含了 jni.h 头 文件,所以需要将 jdk 安装目录下 include 文件夹下的 jni.h 头文件和 in..._32位jdk连不上数据库
文章浏览阅读607次,点赞19次,收藏18次。例如,虽然 8B 参数模型在 Chinchilla 的最佳训练计算量对应于约 200B 个Token,但我们发现,即使在模型训练完成之后,再接受了两个数量级以上的数据训练,模型性能仍在继续提高。此版本是在 15 万亿个 Token 上预训练的语言模型,具有 8B 和 70B 两种参数规模,可以支持广泛的用户场景,在各种行业基准上取得了最先进的性能,并提供一些了新功能,包括改进的推理能力,这些都是同时期最好的开源模型。此外,还进行了广泛的实验,以评估在最终预训练数据集中混合不同来源的数据的最佳方法。_如何解决llama3 token长度问题
文章浏览阅读347次。Ubuntu安装svnapt-get install subversiongit工具使用ubuntu 18.04下svn的安装与基本命令_svn删除文件夹命令
文章浏览阅读3.2k次。上一节,我们学会了全幻化的制作,功力精进了一步,这一节,将会讲解全图纸的制作,也基本上是金手指教程的最后一节了,通过这一节,读者将会看到如何将逆向程序分析方法使用得淋漓尽致,面对任何困难也能无坚不摧1. 我们搜索图纸英文recipe,在sAllRecipes函数中发现了图纸类型一共有4种,分别是,铁匠,附魔工匠,珠宝匠,卡奈魔盒,也就是0,1,2,3,这个很重要,一会儿会用到2. 在U...
文章浏览阅读1.9w次,点赞2次,收藏9次。Revit 导出IFC文件对于了解过BIM的人员来说,IFC文件应该并不陌生!那么我们常用的revit软件在绘制完建筑信息模型之后,如何有效的导出相应的完整的IFC文件呢?是不是有人遇到过这种情况,直接用revit软件中导出功能,所得到的IFC文件再被打开时发现,看不到模型。对于这种情况,如何解决呢?本文便讲解如何解决这个问题!第一:找到exportlayers-ifc-..._revit导出ifc
文章浏览阅读2.7k次,点赞2次,收藏3次。觉得有帮助的同学可以点个赞!传递给更多人!docker进入容器docker exec -it 容器id bashcentos开机自启docker# 设置开机启动systemctl enable docker.service# 关闭开机启动systemctl disable docker.servicedocker容器设置自动启动# 启动时加--restart=alwaysdocker run -d --restart=always -p 3307:3306 -e MYSQL_ROO_docker中怎么开机启动mariadb
文章浏览阅读3k次,点赞11次,收藏38次。Python 用Tushare接口获取股票数据并存储到Sqlite数据库使用技术介绍:关于接口 由于tushare旧版本即将不能用了,所以我们这里使用的是tushare pro 接口。关于数据库 使用了Sqlite轻量级数据库适合本地使用。具体实现Tushare Pro 爬取数据Pro接口需要前往官网(https://tushare.pro/)注册,并获取token,过程较为繁琐,而本文篇幅有限故将在之后更新获取token文章。将获取到的token值放进config文件中的tushare_id,ts_code,trade_date,close,open,high,low,pre_close,change,pct_chg,vol,amoun
文章浏览阅读1.6k次。java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:99) at or_illegalstateexception:falied to convert map to bean
文章浏览阅读8k次。不管是手机还是电脑,刚买的时候运行都是挺快的,时间用久了,就开始出来卡顿和反应慢的现象。那么电脑很卡是什么原因?是什么原因造成电脑卡顿的呢?恐怕很多用户都不是很了解,下面,小编就来跟大家分享电脑卡的原因有哪些。电脑是与我们生活越来越相关的一个物品,使用电脑也成了我们聊天,学习,娱乐甚至工作的新方式,这时候,一个流畅的电脑使用就很重要了,电脑卡顿的原因有许多,为了用户更好的了解,下面,小编就来跟大家..._电脑很卡是什么原因