《Multiobjective Evolutionary Algorithms:A Comparative Case Study and the Strength Pareto Approach》阅读笔记

摘要  本文以扩展的0-1背包问题为基础,对四种多目标进化算法进行了定量比较。此外,我们还引入了一种新的多目标进化优化方法–SPEA,它以一种独特的方式结合了以往多目标EA的几个特点。它的特征是a)将非支配解外部存储在第二个不断更新的种群中,b)根据支配它的外部非支配点的数量来评估个体的适应度,c)使用Pareto支配关系保持种群多样性,以及d)结合聚类过程以便在不破坏其特征的情况下减少非支配集。

1 INTRODUCTION

  首先提出现实世界中的优化问题经常时多目标的,并且目标之间是相互竞争的关系,因此找到的解也通常是一组解而不是单一最优解。
由于相较于盲目的随机搜索,EA(evolutionary algorithm)更适合解决这样的多目标问题,因此为解决多目标优化问题,提出了不少multiobjective EA,不同的问题适用不同的算法(不同算法的算法对比见【5】)
  本文的结构如下:第二节介绍了进化多目标优化领域中使用的关键概念,并对本研究中考虑的多目标进化算法进行了概述;第三节介绍了关于0/1背包问题的四个多目标进化算法的比较,其中又分为三个部分:测试问题的描述、比较的方法和实验结果;第四节介绍了SPEA的基本原理及其在三个问题(Schaffer问题、背包问题和系统级综合)上的应用;最后一节对全文做出总结并进行了未来展望。

2 MULTIOBJECTIVE OPTIMIZATION USING EVOLUTIONARY ALGORITHM

2.1 基础定义

多目标优化问题可以写为:
max⁡/min⁡y=f(x)=(f1(x),f2(x),...,fn(x))subjecttox=(x1,x2,...,xm)∈Xy=(y1,y2,...,ym)∈Y\begin{aligned} \max\text{/}\min\text{\ }\boldsymbol{y}&=f\left( \boldsymbol{x} \right) =\left( f_1\left( \boldsymbol{x} \right) ,f_2\left( \boldsymbol{x} \right) ,...,f_n\left( \boldsymbol{x} \right) \right) \\ subject\ to\ \boldsymbol{x}&=\left( x_1,x_2,...,x_m \right) \in X \\ \boldsymbol{y}&=\left( y_1,y_2,...,y_m \right) \in Y \end{aligned} max/min ysubject to xy​=f(x)=(f1​(x),f2​(x),...,fn​(x))=(x1​,x2​,...,xm​)∈X=(y1​,y2​,...,ym​)∈Y​
其中,xxx表示决策向量,yyy表示目标向量,XXX是参数空间,YYY是目标空间。
支配(cover)的定义:
在最大化问题中的两个决策向量:a,b∈Xa,b \in Xa,b∈X,aaa支配bbb(即a≻ba\succ ba≻b)当:
∀i∈{1,2,...,n}:fi(a)≥fi(b)∧∃j∈{1,2,...,n}:fj(a)>fj(b)\begin{aligned} \forall i\in \left\{ 1,2,...,n \right\} &:f_i\left( \boldsymbol{a} \right) \ge f_i\left( \boldsymbol{b} \right) \ \land \ \\ \exists \boldsymbol{j}\in \left\{ 1,2,...,n \right\} &:f_j\left( \boldsymbol{a} \right) >f_j\left( \boldsymbol{b} \right) \end{aligned} ∀i∈{1,2,...,n}∃j∈{1,2,...,n}​:fi​(a)≥fi​(b) ∧ :fj​(a)>fj​(b)​
帕累托最优解:搜索空间中不被支配的决策向量。
帕累托最优解集(帕累托前沿面):由整个搜索空间中所有帕累托最优解组成。

2.2 适应度分配策略

主要分为以下三类:
a.plain aggregating method: 不适用于多目标优化问题;需要较多的领域知识;常用的方法由:加权求和、目标向量优化、目标达成方法等。
b. population-based non-Pareto approaches: 可以在一次运行中进化出多个非支配解,通过在繁殖阶段改变选择标准,同时在多个方向上引导搜索。部分算法中交配池的选择是根据nnn个目标中的一个,其余算法都是使用多个目标的线性组合。
c. Pareto-based assignment:用帕累托支配的顺序确定繁殖的概率(但对非凸问题不敏感)。
  其余方法基本由以上方法的组合形成。

2.3 多模式优化以及多样性保护

  多模式搜索的目的是使帕累托解的分布尽可能均匀,单一的EA经常会由于1)选择压力;2)选择噪声;3)操作中断 遗漏最优解。因此提出了两种保护种群多样性的方法:niching techniques 和nonniching techniques.
  niching techniques中最常用的是fitness sharing。在个体必须将可用资源分享给σshare\sigma _{share}σshare​半径内的(邻域内)其他个体。
  (根据距离函数作用在基因型还是表型,可以分为基因共享和表型共享;表型共享可以在决策向量或者目标向量上进行)
  nonniching techniques中最常用的是restricted mating。在一定距离σmate\sigma_{mate}σmate​内的个体才允许交配,该方法应用并不广泛。

2.4 四种基于种群的方法

以下是我们将要在应用在背包问题中进行比较的四种多目标进化算法:

2.4.1 VEDA(Vector Evaluated Genetic Algorithm)

  将交配池分为nnn个大小相同的部分,其中第iii个部分是由根据第iii个目标随机选择的个体组成,然后对交配池进行洗牌、交叉和变异。

2.4.2 HLGA(Vector Evaluated Genetic Algorithm)

  本质是一种对目标函数的加权求和,只不过权重不固定,而是在基因中进行编码,并且通过表型适应度共享提高了权重组合的多样性,同时限制交配既可以加快收敛又可以提高遗传搜索的稳定性。

2.4.3 NPGA(Niched Pareto Genetic Algorithm)

  该方法结合了锦标赛选择和帕累托排序:从种群中随机选择两个个体和一个比较集(比较集大小为tdomt_{dom}tdom​),如果一个个体可以被比较集中的任意个体支配,另一个不是,则后者获胜;若两者都被支配(或都不被支配),则选择小生境内(σshare\sigma_{share}σshare​)个体最少的一个进行繁殖。

2.4.4 NSGA(Nondominated Sorting Genetic Algorithm)

3 PERFORMANCE COMPARISON

  以下是对四个算法在解决多目标0/1背包问题的实例研究,重点考虑的是算法寻找多个帕累托解的有效性。

3.1 多目标0/1背包问题

3.1.1 问题的数学描述

  通常,0/1背包问题由一组物品、与每件物品相关的重量和利润以及背包容量的上限组成。该问题的任务是找到一个项目的子集,使子集中的总利润最大化,而所有选定的项目都可以放入背包中,即总重量不超过给定的容量。
  设给定mmm个物品,nnn个背包,相关符号含义如下:
pi,j=第i个背包中第j个物品的收益wi,j=第i个背包中第j个物品的重量ci=第i个背包的容量\begin{aligned} p_{i,j}&=第i个背包中第j个物品的收益 \\ w_{i,j}&=第i个背包中第j个物品的重量 \\ c_{i}&=第i个背包的容量 \end{aligned} pi,j​wi,j​ci​​=第i个背包中第j个物品的收益=第i个背包中第j个物品的重量=第i个背包的容量​
目标是寻找一个向量(物品组合)x=(x1,x2,...,xm)∈{0,1}m\boldsymbol{x}=\left( x_1,x_2,...,x_m \right) \in \left\{ 0,1 \right\} ^mx=(x1​,x2​,...,xm​)∈{0,1}m(当物品jjj被选中,xj=1x_{j}=1xj​=1),使得:
∀i∈{1,2,...,n}:∑j=1mwi,j⋅xj≤ci\forall i\in \left\{ 1,2,...,n \right\} :\sum_{j=1}^m{w_{i,j}\cdot x_j\le c_i} ∀i∈{1,2,...,n}:j=1∑m​wi,j​⋅xj​≤ci​
同时f(x)=(f1(x),f2(x),...,fn(x))f\left( \boldsymbol{x} \right) =\left( f_1\left( \boldsymbol{x} \right) ,f_2\left( \boldsymbol{x} \right) ,...,f_n\left( \boldsymbol{x} \right) \right)f(x)=(f1​(x),f2​(x),...,fn​(x))达到最大值,其中:
fi(x)=∑j=1mpi,j⋅xjf_i\left( \boldsymbol{x} \right) =\sum_{j=1}^m{p_{i,j}\cdot x_j} fi​(x)=j=1∑m​pi,j​⋅xj​

3.1.2 测试数据

一共考虑了九种情况:分别是2、3、4个背包,对应250、500、750个物品,收益pi,jp_{i,j}pi,j​和重量wi,jw_{i,j}wi,j​是[10,100]中的随机数,背包容量设置为物品总重量的一半:
ci=0.5∑j=1mwi,jc_{i}=0.5\sum_{j=1}^m{w_{i,j}} ci​=0.5j=1∑m​wi,j​

3.1.3 实现

  提出了一种对基因的修复机制(为了保证x∈{0,1}m\boldsymbol{x}\in \left\{ 0,1 \right\} ^mx∈{0,1}m对应的二进制编码sss在可行域内):从sss中逐步地删去物品,直到满足所有约束。删除的顺序由物品的单位重量利润决定,单位重量利润越小的越先被删除。
物品jjj的单位重量利润由下式可得:
qj=max⁡ni=1{pi,jwi,j}q_j=\underset{i=1}{\overset{n}{\max}}\left\{ \frac{p_{i,j}}{w_{i,j}} \right\} qj​=i=1maxn​{wi,j​pi,j​​}

3.2 方法论

  在比较的背景下,存在以下几个问题:应该用什么量化指标来表示EA的运算结果的质量才比较有意义?一组多目标EA的运算结果应该是什么?为了保证比较的有效性,如何排除由不同的选择策略或交配限制产生的副作用?如何合理设置参数?接下来我们将一一讨论这几个问题:

3.2.1量化指标

3.2.1.1 Size of the space coverd

设X′=(x1,x2,...,xk)⊆XX'=\left( \boldsymbol{x}_1,\boldsymbol{x}_2,...,\boldsymbol{x}_k \right) \subseteq XX′=(x1​,x2​,...,xk​)⊆X表示kkk个决策向量形成的集合,函数S(X′)\mathcal{S}\left( \mathcal{X}' \right)S(X′)表示了多面体p1,p2,...,pkp_1,p_2,...,p_kp1​,p2​,...,pk​的并的体积,其中每个pip_ipi​由“xi\boldsymbol{x}_ixi​与坐标轴形成的超平面”的交集组成(形成方式是:由目标空间中过点(f1(xi),f2(xi),...,fn(xi))\left( f_1\left( \boldsymbol{x}_i \right) ,f_2\left( \boldsymbol{x}_i \right) ,...,f_n\left( \boldsymbol{x}_i \right) \right)(f1​(xi​),f2​(xi​),...,fn​(xi​))与各坐标轴垂直的超平面相交)。比如在二维空间中每个pip_ipi​表示顶点为(0,0)(0,0)(0,0)和(f1(xi),f2(xi))\left( f_1\left( \boldsymbol{x}_i \right) ,f_2\left( \boldsymbol{x}_i \right) \right)(f1​(xi​),f2​(xi​))的矩形。

3.2.1.2 Coverage of two sets

设X′,X′′⊆XX',X''\subseteq XX′,X′′⊆X是两组决策向量集,函数C\mathcal{C}C将有序对(X′,X′′)(X',X'')(X′,X′′)映射到[0,1][0,1][0,1]之间:
C(X′,X′′):=∣{a′′∈X′′;∃a′∈X′:a′≻a′′}∣∣X′′∣\mathcal{C}\left( X',X'' \right) :=\frac{\left| \left\{ \boldsymbol{a''}\in X'';\exists \boldsymbol{a'}\in X':\boldsymbol{a'}\succ \boldsymbol{a''} \right\} \right|}{\left| X'' \right|} C(X′,X′′):=∣X′′∣∣{a′′∈X′′;∃a′∈X′:a′≻a′′}∣​
当C(X′,X′′)=1\mathcal{C}\left( X',X'' \right)=1C(X′,X′′)=1时,说明集合X′′X''X′′中所有点都可被集合X′X'X′中的点支配,反之则反。需要注意的是该函数具有有序性,也就是C(X′,X′′)≠C(X′′,X′)\mathcal{C}\left( X',X'' \right)\ne\mathcal{C}\left( X'',X' \right)C(X′,X′′)​=C(X′′,X′).
  函数S\mathcal{S}S的优点是,每个EA都可以独立于其他EA进行评估;但该方法更适用于凸区域,并且在某些情况下该方法会高估某些解决方案。函数C\mathcal{C}C克服了这一缺点,可以用来表明一种算法的结果主导另一种算法的结果,但也无法描述优越程度。
  由于在上述比较中,重点是寻找Pareto最优集,而不是考察在权衡表面上是否均匀分布,所以我们没有考虑EA的在线性能(online performance),而是离线性能(offline performance)。因此,所有世代生成的所有个体的非支配集都被视为一次优化运行的输出。为了限制随机效应的影响,每个EA和测试问题总共执行了30次独立运行。每次取另一个随机创建的初始种群,对于每个测试问题,所有EA都在相同的30个初始种群上运行。

3.2.2 选择策略和交配限制

  为了保证对比的公平想,采用同样的选择策略:binary tournament selection with replacement,同时对共享策略进行了改进:continuously updated sharing:部分填充的下一代被用来计算生态位计数,而不是当前一代(详情见【18】、【26】)。由于只有HLGA考虑了交配限制,为了保证对比的公平,对所有算法都不使用交配限制(对比试验也证明加入交配限制没有太大的影响)。

3.2.3 参数设置

generation:500
crossover probability:0.8
mutation probability:0.01
其余参数设置如下表:

3.3 实验结果

  作为补充参考,在比较中还考虑了两种方法:随机抽样和多重独立抽样。第一种算法(RAND)每一代都根据交叉和变异概率随机地生成一定数量的个体,因此与EA的适应度评估个数相同。第二种算法是使用了加权求和方法的精英式单目标EA算法,为了与其他算法形成对比,每个测试问题都独立运行100次,每次运行都向随机选择的目标的线性组合方向运行,在100次运行中生成的所有解决方案中的非支配解都形成了该测试问题的权衡前沿。此外,研究了两种版本的单目标进化算法:一种是对目标的线性组合优化运行100代(SO-1),另一种是在每次优化运行500代后终止(SO-5)。
  以下分别是各个算法函数C\mathcal{C}C的盒型图、函数S\mathcal{S}S的盒型图以及两个背包时各个算法的权衡面。


4 THE STRENGTH PARETO APPROACH

SPEA与其他多目标EA算法的相似之处:
1)将所有非支配解储存在外部;
2)利用帕累托支配对个体的适应度进行排序;
3)利用聚类减少存储的非支配解数量并不破坏权衡面的特征。
SPEA的特殊之处体现在以下四个方面:
1)在一个算法中融合了以上三种方法;
2)个体的适应度只取决于储存在外部非支配解集,与群体中其他成员是否有支配关系不重要;
3)外部非支配解集中所有解都参与选择;
4)为保护种群多样性提出了一种新的小生境方法:基于帕累托并且不需要任何距离参数。

4.1 算法

  主要算法流程如下:
Step 1) 生成初始种群PPP并建立一个空的外部非支配集P′P'P′
Step 2) 将PPP中的非支配解放入P′P'P′
Step 3) 移除P′P'P′中被支配的解
Step 4) 如果外部非支配解的数量超出最大值N′N'N′,用聚类的方法删除部分解
Step 5) 计算PPP和P′P'P′中所有个体的适应度值
Step 6) 用binary tournament selection with replacement的方法从PPP和P′P'P′的所有个体中选择,直至填满交配池
Step 7) 应用交叉和变异算子
Step 8) 如果达到了最大迭代次数则停止,否则返回Step 2
  以下详细说明适应度分配和聚类过程。

4.1.1 适应度分配

  适应度分配过程主要分为两个阶段:首先对外部非支配集P′P'P′中的个体进行排序 ,再对种群内的个体进行评估。
Step 1) 每个外部非支配集P′P'P′中的个体iii都对应一个强度(strength)sis_isi​:si=nN+1s_i=\frac{n}{N+1}si​=N+1n​,其中nnn表示在PPP中被iii支配的个体数量,NNN表示PPP的大小。适应度fi=sif_i=s_ifi​=si​。
Step 2) PPP中的个体jjj的适应度为P′P'P′中能支配jjj的个体iii强度之和。为了保证P′P'P′中的个体有更好的适应度,在上述强度之和上再加1。(注意这里适应度值越小,繁殖概率越高)
fj=1+∑i,i≻jsif_j=1+\sum_{i,i\succ j}{s_i} fj​=1+i,i≻j∑​si​
如下图所示:

  左下角的暗阴影矩形被所有三个非控制点覆盖,而左上角明亮阴影的矩形只被一个非控制点覆盖。我们认为这些区域是niches,目标是将个体分布在这个“网格”上,使得:a)只被几个非支配点覆盖的(更亮的阴影)区域包含的个体比被多个非支配点覆盖的(暗阴影的)矩形多,以及b)一个区域包含与被相同数量的非支配点覆盖(即有同样阴影程度)的其他矩形一样多的个体。
  这种机制直观反映了算法保留靠近帕累托最优前沿的个体,并希望其沿着权衡表面分布的思想。图4(a)说明了第一点:位于明亮区域的个体比其余种群成员获得更好的适应值。图4(b)说明了第二点,并直观地显示了强度原则:在其niche中有许多相邻个体,由于相关非支配点的高强度值而受到惩罚;非支配解越“强”,被覆盖的个体越不“适合”。
  这样定义适应度共享的优势在于niches不是通过距离定义而是用帕累托支配,这样就不需要考虑距离参数。

4.1.2 聚类算法减少帕累托解

  外部非支配解的数量可能非常多甚至有无穷多个,过多的非支配解会给算法带来较大影响:一是减缓算法的搜索速度;二是使种群分布不均匀,因此很有必要控制外部非支配解集的大小。因此使用聚类方法:average linkage method,步骤如下:
Step 1) 初始化聚类集CCC,每个外部非支配解i∈P′i\in P'i∈P′都构成一个聚类C=⋃i{{i}}C=\bigcup_i{\left\{ \left\{ i \right\} \right\}}C=⋃i​{{i}}
Step 2) 如果∣C∣≤N′\left| C \right|\le N'∣C∣≤N′,则进行Step 5 ,否则进入Step 3。
Step 3) 计算每两个聚类c1c_1c1​、c2c_2c2​间的距离
d=1∣c1∣⋅∣c2∣⋅∑i1∈c1,i2∈c2∥i1−i2∥d=\frac{1}{\left| c_1 \right|\cdot \left| c_2 \right|}\cdot \sum_{i_1\in c_1,i_2\in c_2}{\lVert i_1-i_2 \rVert} d=∣c1​∣⋅∣c2​∣1​⋅i1​∈c1​,i2​∈c2​∑​∥i1​−i2​∥
这里距离∥⋅∥\lVert \cdot \rVert∥⋅∥是目标空间中的欧氏距离。
Step 4) 选择距离最小的两个聚类进行合并:KaTeX parse error: Expected 'EOF', got '\right' at position 23: …left\{ c_1,c_2 \̲r̲i̲g̲h̲t̲\} \cup \left\{…,返回Step 2。
Step 5) 从每个聚类中选取一个个体作为代表,计算合并后的非支配集。这里的代表选取每个聚类中的中心点(即距离同一类中其他点平均距离最小的点)。

4.2 一个检验函数:Schaffer’s f2f_2f2​

由Schaffer定义的检验函数f2f_2f2​表达式如下:
min⁡f2(x)=(g(x),h(x))whereg(x)=x2h(x)=(x−2)2\begin{aligned} \min\ f_2\left( x \right)&=\left( g\left( x \right) ,h\left( x \right) \right) \\ where\ g\left( x \right)&=x^2 \\ \ h\left( x \right) &=(x-2)^2 \end{aligned} min f2​(x)where g(x) h(x)​=(g(x),h(x))=x2=(x−2)2​
显然,在x∈[0,2]x\in[0,2]x∈[0,2]时,两个函数一增一减,所以为了在f2f_2f2​上测试SPEA,我们取14位的二进制编码指代[−6,6][-6,6][−6,6]上的实数,00000000000000表示-6,11111111111111表示6。其余参数设置如下:

参数 数值
种群大小NNN 95/70/30
外部非支配集大小N′N'N′ 5/30/70
交叉概率 1.0
变异概率 0.0
迭代次数 100

下图是VEGA和SPEA在f2f_2f2​上的对比:

显然SPEA生成的解更加均匀。

4.3 在0/1背包问题上的结果


  由图像可以看出:1)SPEA在多目标EA算法中有更好的评估效果,覆盖的帕累托前沿面更广;2)SPEA求得的解计算量更少,更接近帕累托最优前沿;3)精英主义似乎比较重要,因为SP-S(没有将P′P'P′加入选择阶段)效果比SPEA差很多。

4.4 System-Level Synthesis中的应用

5 CONCLUSION

  本研究比较了多目标0/1背包问题的四个多目标进化算法在九个不同问题设置下的优劣,并通过覆盖空间的大小来定量地衡量所获得的帕累托最优集的质量。此外,通过定义帕累托支配概念,对这些方法的结果进行了评估比较。
  所有多目标进化算法的性能明显优于纯随机搜索策略,后者在搜索空间中随机生成新点,而不利用解之间的相似性。在这些多准则进化算法中,NSGA在所有测试问题上都取得了最好的结果。紧随其后的是VEGA,在这类问题上比NPGA有优势。与HLGA相比,VEGA和NPGA都被评估为在这里考虑的两个绩效衡量标准方面更好。
  此外,还提出了一种新的多目标优化进化算法(SPEA),它不同于已有的多准则进化算法,它是基于协同进化原理和基于Pareto支配概念的小生境技术进行的。如三个应用所示,SPEA能够有效地引导搜索走向帕累托最优前沿。在0/1背包问题上,它的性能远远超过其他四个多目标进化算法。此外,实验结果表明,与单目标进化算法相比,SPEA算法甚至可以找到更接近全局最优权衡曲面的解。
  关于未来的前景,以下问题可能值得研究:
1)如有可能,其他概率搜索算法,如模拟退火法、爬山法、禁忌搜索法等,以及“精确”方法(如整数线性规划、分枝定界法)和确定性启发式算法应在多目标0/1背包问题上进行测试,这将需要对EA的性能进行更准确的评估。
2)各种算法得到的非支配集的分布应包括在比较中。虽然覆盖空间的大小是考虑到这一属性的绩效衡量标准,但它没有实现对分布的单独评估。
3)还应对具有不同特征(如非凸性)的其他测试进行比较研究。
  最后,多目标优化进化算法的理论仍有待研究,我们需要结合不同的选择方案来检验不同的适应度分配方法。

《Multiobjective Evolutionary Algorithms:A Comparative Case Study and the Strength Pareto Approach》相关推荐

  1. 2018/8/24阅读文献 A Unified Model for Multi-Objective Evolutionary Algorithms with Elitism

    信息:  2000年    苏黎世联邦理工学院 题目: A Unified Model for Multi-Objective Evolutionary Algorithms with Elitism ...

  2. 《Reducing Word Omission Errors in Neural Machine Translation:A Contrastive Learning Approach》论文阅读笔记

    Reducing Word Omission Errors in Neural Machine Translation:A Contrastive Learning Approach 基本信息 研究目 ...

  3. 《SiamMask:Fast Online Object Tracking and Segmentation:A Unifying Approach》论文笔记

    参考代码:SiamMask 1. 概述 导读:这篇文章在基于孪生网络的目标跟踪算法离线训练的过程中嵌入一个mask分割分支,从而可到一个既可以做VOT也可以做VOS(分割性能这块可以还有很大空间)的网 ...

  4. 阅读Book: MultiObjective using Evolutionary Algorithms (5) ---- Non-Dominated Sorting of a Population

    种群非支配等级排序. Why??不是说就为了找到非支配集合吗? 这个不是多目标中优化中追求的一个goal? 解释: Most evolutionary multi-objective optimiza ...

  5. Case Study. Technical and Commercial understating. Internal use only.

    Case Study. Technical and Commercial understating. Internal use only. You're a consultant for a Tech ...

  6. Deep Learning-Based Video Coding: A Review and A Case Study

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! 1.Abstract: 本文主要介绍的是2015年以来关于深度图像/视频编码的代表性工作,主要可以分为两类:深度编码方案以及基于传统编码方 ...

  7. 【论】Towards Smart Transportation System: A Case Study on the Rebalancing Problem of Bike Sharing Sys

    Towards Smart Transportation System:A Case Study on the Rebalancing Problem of Bike Sharing System B ...

  8. Omnifocus使用6【Workflow Case Study】

    让各位久等啦~<工具控的福音-Omnifocus使用心得总结>的最后一篇,我觉得是全系列中最有价值的一篇,看上去是写Omnifocus的工作流,其实其中更多的是我自己的一些GTD系统心得. ...

  9. Data Visualization – Banking Case Study Example (Part 1-6)

    python信用评分卡(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_camp ...

  10. 带约束进化算法问题分析Constrained Evolutionary Algorithms

    经典论文<Evolutionary Algorithms for Constrained Parameter Optimization Problems>对带约束的进化算法进行了综述,本文 ...

最新文章

  1. 【经典书】线性代数与应用(附pdf)
  2. 计算机配置中无可移动设备访问,USB连接正常,但是我的电脑中不显示可移动 – 手机爱问...
  3. 【控制】《多智能体系统的协同群集运动控制》陈杰老师-第1章-绪论
  4. 收藏:发展之道:简单与专注
  5. 2021年第十二届蓝桥杯 - 省赛 - C/C++大学A组 - D.路径
  6. 使用Nginx代理和转发Websocket连接
  7. Tensorflow Serving 介绍
  8. 会php学java入门要多久_php8(java入门要多久)
  9. dategurd oracle_Oracle 时间和日期处理
  10. mysql phpmyadmin远程_phpmyadmin登录远程mysql数据库
  11. python response.json_Python - Django - JsonResponse 对象
  12. laravel CURD
  13. mysql之 OPTIMIZE TABLE整理碎片
  14. Python实现对nginx日志access.log统计
  15. Arduino-atmega328p最小系统
  16. 拉姆达表达式基本语句
  17. 移动云迁移工具:Hyper-V虚拟化迁移到移动云
  18. 在线招聘风起,周伯通怎么玩社区招聘?
  19. 归零的心态,做好团队回顾
  20. 使用json报错java.lang.NoClassDefFoundError: nu/xom/ParentNode

热门文章

  1. 挂载iphone ipsw升级包
  2. Linux创建WIFI热点
  3. 【支持升级官方最新版】西部数码主机代理系统模板源码IDC网站源码虚拟主机代理管理系统
  4. c语言练习----渔夫打鱼晒网
  5. 医学图像自适应计算图像窗宽窗位技巧
  6. IPQ8072A Qualcomm IPQ CallManager拨号程序移植文档
  7. NOI 十连测 Zbox loves ants
  8. 计算机的硬盘如何查看,怎样查看电脑硬盘信息 电脑中的硬盘信息
  9. 拉丁巨星——恰恰恰[Flash]
  10. 形容人的内核是什么意思_【得到】人人都需要的精准表达术-老光