收藏 分享(赏)

数学建模教材23第二十三章 现代优化算法.pdf

上传人:eco 文档编号:4395186 上传时间:2018-12-27 格式:PDF 页数:24 大小:280.22KB
下载 相关 举报
数学建模教材23第二十三章  现代优化算法.pdf_第1页
第1页 / 共24页
数学建模教材23第二十三章  现代优化算法.pdf_第2页
第2页 / 共24页
数学建模教材23第二十三章  现代优化算法.pdf_第3页
第3页 / 共24页
数学建模教材23第二十三章  现代优化算法.pdf_第4页
第4页 / 共24页
数学建模教材23第二十三章  现代优化算法.pdf_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、 -451-第二十三章 现代优化算法 现代优化算法是 80 年代初兴起的启发式算法。这些算法包括禁忌搜索( tabu search) ,模拟退火( simulated annealing) ,遗传算法( genetic algorithms) ,人工神经网络( neural networks) 。它们主要用于解决大量的实际应用问题。目前,这些算法在理论和实际应用方面得到了较大的发展。无论这些算法是怎样产生的,它们有一个共同的目标求 NP-hard 组合优化问题的全局最优解。虽然有这些目标,但 NP-hard 理论限制它们只能以启发式的算法去求解实际问题。 启发式算法包含的算法很多,例如解决复杂

2、优化问题的蚁群算法( Ant Colony Algorithms) 。有些启发式算法是根据实际问题而产生的,如解空间分解、解空间的限制等;另一类算法是集成算法,这些算法是诸多启发式算法的合成。 现代优化算法解决组合优化问题, 如 TSP( Traveling Salesman Problem) 问题, QAP( Quadratic Assignment Problem)问题, JSP( Job-shop Scheduling Problem)问题等效果很好。 1 模拟退火算法 1.1 算法简介 模拟退火算法得益于材料的统计力学的研究成果。统计力学表明材料中粒子的不同结构对应于粒子的不同能量水平

3、。在高温条件下,粒子的能量较高,可以自由运动和重新排列。在低温条件下,粒子能量较低。如果从高温开始,非常缓慢地降温(这个过程被称为退火) ,粒子就可以在每个温度下达到热平衡。当系统完全被冷却时,最终形成处于低能状态的晶体。 如果用粒子的能量定义材料的状态, Metropolis 算法用一个简单的数学模型描述了退火过程。假设材料在状态 i之下的能量为 )(iE ,那么材料在温度 T 时从状态 i进入状态 j 就遵循如下规律: ( 1)如果 )()( iEjE ,接受该状态被转换。 ( 2)如果 )()( iEjE ,则状态转换以如下概率被接受: KTjEiEe)()( 其中 K 是物理学中的波尔

4、兹曼常数, T 是材料温度。 在某一个特定温度下,进行了充分的转换之后,材料将达到热平衡。这时材料处于状态 i的概率满足波尔兹曼分布: =SjKTjEKTiETeeixP)()()( 其中 x表示材料当前状态的随机变量, S 表示状态空间集合。 显然 |1lim)()(SeeSjKTjEKTiET=-452- 其中 | S 表示集合 S 中状态的数量。这表明所有状态在高温下具有相同的概率。而当温度下降时, +=minminminminminminmin)()()(0)()(0limlimSjKTEjESjKTEjEKTEiETSjKTEjEKTEiETeeeee=其它若0|1limminmin

5、)()(0minminminSiSeeSjKTEjEKTEiET其中 )(minminjEESj= 且 )(|minminEiEiS = 。 上式表明当温度降至很低时,材料会以很大概率进入最小能量状态。 假定我们要解决的问题是一个寻找最小值的优化问题。将物理学中模拟退火的思想应用于优化问题就可以得到模拟退火寻优方法。 考虑这样一个组合优化问题:优化函数为+ Rxf : ,其中 Sx ,它表示优化问题的一个可行解, 0,| =+yRyyR , S 表示函数的定义域。 SxN )( 表示 x的一个邻域集合。 首先给定一个初始温度0T 和该优化问题的一个初始解 )0(x , 并由 )0(x 生成下一

6、个解 )0( xNx ,是否接受 x 作为一个新解 )1(x 依赖于下面概率: rand(1) S0=S0(1:c1-1),S0(c2:-1:c1),S0(c2+1:102); Sum=Sum+df; end T=T*at; if T0 flag=0; for m=1:L-3 for n=m+2:L-1 if d(c1(m),c1(n)+d(c1(m+1),c1(n+1)0 flag=0; for m=1:L-3 for n=m+2:L-1 if d(c1(m),c1(n)+d(c1(m+1),c1(n+1)d(c1(m),c1(m+1)+d(c1(n),c1(n+1) flag=1; c1(

7、m+1:n)=c1(n:-1:m+1); end end end -466- end J(k,c1)=1:102; end J=J/102; J(:,1)=0;J(:,102)=1; rand(state,sum(clock); %遗传算法实现过程 A=J; for k=1:dai %产生 01 间随机数列进行编码 B=A; %交配产生子代B for i=1:2:w ch0=rand;ch(1)=4*ch0*(1-ch0); for j=2:50 ch(j)=4*ch(j-1)*(1-ch(j-1); end ch=2+floor(100*ch); temp=B(i,ch); B(i,ch)=

8、B(i+1,ch); B(i+1,ch)=temp; end %变异产生子代 C by=find(rand(1,w)0.1); if length(by)=0 by=floor(w*rand(1)+1; end C=A(by,:); L3=length(by); for j=1:L3 bw=2+floor(100*rand(1,3); bw=sort(bw); C(j,:)=C(j,1:bw(1)-1,bw(2)+1:bw(3),bw(1):bw(2),bw(3)+1:102); end G=A;B;C; TL=size(G,1); %在父代和子代中选择优良品种作为新的父代 dd,IX=sor

9、t(G,2);temp(1:TL)=0; for j=1:TL for i=1:101 temp(j)=temp(j)+d(IX(j,i),IX(j,i+1); end end DZ,IZ=sort(temp); A=G(IZ(1:w),:); -467-end path=IX(IZ(1),:) long=DZ(1) toc 在仿真试验中, 我们对文中航路规划问题分别利用断点交叉和换位变异结合的遗传算法,多点交叉和移位变异结合的遗传算法和文中提出的改进算法进行求解比较。表 3是各种算法种群规模( 50=M )和迭代次数( 100=G )都相同时连续 20 次求解的平均值(公里) ,算法平均运算

10、时间(秒) 。 表 3 算法性能比较表 指标 断点交叉算法 多点交叉算法 文中改进算法 平均航路距离 41572 40416 39648 算法执行时间 5.937 6.125 2.985 本文从算法结构到具体的遗传操作都进行了改进, 其中变异操作从交叉操作中分离出来, 使得遗传算法也可以通过并行计算实现, 提高算法实现效率。 其次改进后的算法,分别采用变化强度不同的交叉操作和变异操作,其中交叉操作采用强度最弱的单点交叉,保证了算法收敛精度,削弱和避免算法因交叉强度大而产生的寻优抖振问题。当然单一的单点交叉很容易使算法早熟, 文中采用较大强度的多个基因变异正好解决早熟问题。从仿真结果可以看到改进

11、后的算法效果较为明显。 5 Matlab 遗传算法工具 5.1 遗传算法与直接搜索工具箱概述 遗传算法与直接搜索(Genetic Algorith m and Direct Search,简称GADS)工具箱是一系列函数的集合,它们扩展了优化工具箱和Matlab数值计算环境。遗传算法与直接搜索工具箱包含了要使用遗传算法和直接搜索算法来求解优化问题的一些例程。 这些算法使我们能够求解那些标准优化工具箱范围之外的各种优化问题。 所有工具箱函数都是Matlab的M文件,这些文件由实现特定优化算法的Matlab语句所写成。 使用语句 Type function_name 就可以看到这些函数的Matla

12、b代码。我们也可以通过编写自己的M文件来实现和扩展遗传算法和直接搜索工具箱的性能, 也可以将该工具箱与Matlab的其它工具箱或Simulink结合使用来求解优化问题。 工具箱函数可以通过图形界面或Matlab命令行来访问,它们是用Matlab语言编写的,对用户开放,因此可以查看算法,修改源代码或生成用户函数。 遗传算法与直接搜索工具箱可以帮助我们求解那些不易用传统方法解决的问题, 譬如旅行商问题等。 遗传算法与直接搜索工具箱有一个精心设计的图形用户界面,可以帮助我们直观、方便、快速地求解最优化问题。 1功能特点 遗传算法与直接搜索工具箱的功能特点如下: ( 1)图形用户界面和命令行函数可用来

13、快速地描述问题、设置算法选项以及监控进程。 ( 2)具有多个选项的遗传算法工具可用于问题创建、适应度计算、选择、交叉和变异。 ( 3)直接搜索工具实现了一种模式搜索方法,其选项可用于定义网格尺寸、表决-468- 方法和搜索方法。 ( 4)遗传算法与直接搜索工具箱函数可与 Matlab 的优化工具箱或其它的 Matlab程序结合使用。 ( 5)支持自动的 M 代码生成。 2图形用户界面和命令行函数 遗传算法工具函数可以通过命令行和图形用户界面来使用遗传算法。直接搜索工具函数也可以通过命令行和图形用户界面来进行访问。 图形用户界面可用来快速地定义问题,设置算法选项,对优化问题进行详细定义。 遗传算

14、法和直接搜索工具箱还同时提供了用于优化管理、性能监控及终止准则定义的工具,同时还提供了大量的标准算法选项。 在优化运行的过程中,可以通过修改选项来细化最优解,更新性能结果。用户也可以提供自己的算法选项来定制工具箱。 3使用其它函数和求解器 遗传算法与直接搜索工具箱和 Matlab 及优化工具箱是紧密结合在一起的。用户可以用遗传算法或直接搜索算法来寻找最佳起始点,然后利用优化工具箱或用 Matlab 程序来进一步寻找最优解。通过结合不同的算法,可以充分地发挥 Matlab 和工具箱的功能以提高求解的质量。对于某些特定问题,使用这种方法还可以得到全局(最优)解。 4显示、监控和输出结果 遗传算法与

15、直接搜索工具箱还包括一系列绘图函数,用来可视化优化结果。这些可视化功能直观地显示了优化的过程,并且允许在执行过程中进行修改。 使用输出函数可以将结果写入文件,产生用户自己的终止准则,也可以写入用户自己的图形界面来运行工具箱求解器。除此之外,还可以将问题的算法选项导出,以便日后再将它们导入到图形界面中去。 5.2 使用遗传算法工具初步 5.2.1 遗传算法使用规则 遗传算法是一种基于自然选择、生物进化过程来求解问题的方法。在每一步中,遗传算法随机地从当前种群中选择若干个体作为父辈, 并且使用它们产生下一代的子种群。在连续若干代之后,种群朝着优化解的方向进化。我们可以用遗传算法来求解各种不适宜于用

16、标准算法求解的优化问题,包括目标函数不连续、不可微、随机或高度非线性的问题。 遗传算法在每一步使用下列三类规则从当前种群来创建下一代: ( 1)选择规则( Selection Rules) :选择对下一代种群有贡献的个体(称为父辈) 。 ( 2)交叉规则( Crossover Rules) :将两个父辈结合起来构成下一代的子辈种群。 ( 3)变异规则( Mutation Rules) :施加随机变化给父辈个体来构成子辈。 遗传算法与标准优化算法主要在两个方面有所不同,它们的比较情况归纳于表 4中。 表 4 遗传算法与标准优化算法比较 标准算法 遗传算法 每次迭代产生一个单点,点的序列逼近一个优

17、化解 每次迭代产生一个种群,种群逼近一个优化解 通过确定性的计算在该序列中选择下一个点 通过随机进化选择计算来选择下一代种群 5.2.2 遗传算法使用方式 遗传算法工具有两种使用方式: ( 1)以命令行方式调用遗传算法函数 ga。 -469-( 2)通过图形用户界面使用遗传算法工具。 1在命令行使用遗传算法,可以用下列语法调用遗传算法函数 ga: x, fval= ga(fitnessfun,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options) 其中 fitnessfun 是适应度函数句柄, nvars 是适应度函数的独立变量的个数, options 是一个包含遗传

18、算法选项参数的数据结构, 其它参数的含义与非线性规划 fmincon 中的参数相同。 函数所给出的结果为: x 最终值到达的点,这里 x 为行向量, fval 适应度函数的最终值。 例 1 求下列问题的解 3222211332)(max xxxxxxf += s.t. +=+不约束321213213221132222113222211,01224022501022xxxxxxxxxxxxxxxxxxxxx解: ( 1)编写适应度函数(文件名为 fun1.m) function y=fun1(x); %x 为行向量 c1=2 3 1; c2=3 1 0; y=x*c1+x.2*c2; y=-y;

19、 ( 2)编写非线性约束函数(文件名为 fun2.m) function f,g=fun2(x); f=x(1)+2*x(1)2+x(2)+2*x(2)2+x(3)-10 x(1)+x(1)2+x(2)+x(2)2-x(3)-50 2*x(1)+x(1)2+2*x(2)+x(3)-40; g=x(1)2+x(3)-2; ( 3)主函数 a=-1 -2 0;-1 0 0;b=-1;0; x,y=ga(fun1,3,a,b,fun2); x,y=-y 遗传算法程序的运行结果每一次都是不一样的,我们要运行多次,找一个最好的结果。 2通过 GUI 使用遗传算法 遗传算法工具有一个图形用户界面 GUI,

20、它使我们可以使用遗传算法而不用工作在命令行方式。打开遗传算法工具,可键入以下命令: gatool 使用遗传算法工具首先必须输入下列信息: ( 1) Fitness function(适应度函数)欲求最小值的目标函数。输入适应度函数的形式为 fitnessfun,其中 fitnessfun.m 是计算适应度函数的 M 文件。符号 产生一个对于函数 fitnessfun 的函数句柄。 ( 2) Number of variables(变量个数)适应度函数输入向量的长度。 其它参数的含义,我们就不一一介绍了,与优化工具的图形用户界面解法中的参数一样。如果某个参数的值为空,可以输入空矩阵 ,或者什么都

21、不输入。 -470- 例 2 用图形用户界面求解例 1。 在 Matlab 命令窗口运行 gatool,打开图形用户界面,如图 5 所示,填入有关的参数,未填入的参数取值为空或者为默认值,然后用鼠标点一下“ start”按钮,就得到求解结果,再使用“ file”菜单下的“ Export to Workspace”选项,把计算结果输出到Matlab 工作空间中去。 图 5 遗传算法图形用户界面解法 注意: Matlab 工作空间中必须存在变量 a, b。或者编一个小程序,对 a,b 进行赋值,然后运行一下该小程序。 5.3 直接搜索工具 直接搜索的命令为 x,fval = patternsear

22、ch(fun,x0,A,b,Aeq,beq,LB,UB, nonlcon,options) 打开直接搜索的图形用户界面的命令为 psearchtool 例 3 用直接搜索算法求解例 1。 解 编写程序如下(所有程序放在一个文件中) : function example23_3 a=-1 -2 0;-1 0 0;b=-1;0; x,y=patternsearch(fun1,rand(1,3),a,b,fun2); %初始值必须为行向量 x,y=-y %定义目标函数 function y=fun1(x); %x 为行向量 c1=2 3 1; c2=3 1 0; y=x*c1+x.2*c2; y=-

23、y; %定义非线性约束函数 function f,g=fun2(x); f=x(1)+2*x(1)2+x(2)+2*x(2)2+x(3)-10 x(1)+x(1)2+x(2)+x(2)2-x(3)-50 2*x(1)+x(1)2+2*x(2)+x(3)-40; g=x(1)2+x(3)-2; 直接搜索算法每次的计算结果也是不一样的。 -471- 6 蚁群算法 6.1 蚁群算法简介 蚁群是自然界中常见的一种生物,人们对蚂蚁的关注大都是因为“蚁群搬家,天要下雨”之类的民谚。然而随着近代仿生学的发展,这种似乎微不足道的小东西越来越多地受到学者们地关注。 1991 年意大利学者 M. Dorigo 等

24、人首先提出了蚁群算法,人们开始了对蚁群的研究:相对弱小,功能并不强大的个体是如何完成复杂的工作的(如寻找到食物的最佳路径并返回等) 。在此基础上一种很好的优化算法逐步发展起来。 蚁群算法的特点是模拟自然界中蚂蚁的群体行为。科学家发现,蚁群总是能够发现从蚁巢到食物源的最短路径。经研究发现,蚂蚁在行走过的路上留下一种挥发性的激素,蚂蚁就是通过这种激素进行信息交流。蚂蚁趋向于走激素积累较多的路径。找到最短路径的蚂蚁总是最早返回巢穴,从而在路上留下了较多的激素。由于最短路径上积累了较多的激素,选择这条路径的蚂蚁就会越来越多,到最后所有的蚂蚁都会趋向于选择这条最短路径。基于蚂蚁这种行为而提出的蚁群算法具

25、有群体合作,正反馈选择,并行计算等三大特点,并且可以根据需要为人工蚁加入前瞻、回溯等自然蚁所没有的特点。 在使用蚁群算法求解现实问题时,先生成具有一定数量蚂蚁的蚁群,让每一只蚂蚁建立一个解或解的一部分,每只人工蚁从问题的初始状态出发,根据“激素”浓度来选择下一个要转移到的状态,直到建立起一个解,每只蚂蚁根据所找到的解的好坏程度在所经过的状态上释放与解的质量成正比例的“激素” 。之后,每只蚂蚁又开始新的求解过程,直到寻找到满意解。为避免停滞现象,引入了激素更新机制。 6.2 解决 TSP 问题的蚁群算法描述 现以 TSP 问题的求解为例说明蚁群系统模型。首先引进如下记号: n为城市的个数; m

26、为蚁群中蚂蚁的数量;ijd 为两城市 i和 j之间距离; )(tbi为 t时刻位于城市 i的蚂蚁的个数,=niitbm1)( ; )(tij 为 t时刻边弧 ),( ji 的轨迹强度(即 ij 连线上残留的信息量) , 且设 cij=)0( ( c为常数) , nji ,2,1,L= , ji ; )(tij 为 t时刻边弧 ),( ji的能见度,反映由城市 i转移到城市 j的期望程度。 根据上述原理,蚂蚁 ),2,1( mkkL= 在运动过程中根据各条路径上的信息量决定转移方向。 与真实蚁群系统不同, 人工蚁群系统具有一定的记忆功能。 随着时间的推移,以前留下的信息逐渐消逝, 经 n个时刻,

27、 蚂蚁完成一次循环, 各路径上信息量要作调整。由此得到下述的人工蚁群系统模型: 1)设人工蚁群在并行地搜索 TSP 的解,并通过一种信息素做媒介相互通信,在每个结点上且和该结点相连的边上以信息素量做搜索下一结点的试探依据, 直到找到一个TSP 问题的可行解。 2)在时刻 t人工蚁 k 由位置 i转移至位置 j的转移概率为 = SjSjtttttpSvivivijijkij,0, )()()()()(( 3) 其中参数 为轨迹的相对重要性( 0 ) ; 为能见度的相对重要性( 0 ) ; S 为可行点集,即蚂蚁 k 下一步允许选择的城市。 , 分别反映了蚂蚁在运动过程中所积累的信息及启发式因子在

28、蚂蚁选择路径中所起的不同作用。 3)当 m 个人工蚁按( 3)式找到了可行解,则将各边的信息量用下式修改。即调-472- 整信息量的轨迹强度更新方程为 ijijijtt +=+ )()1( , )1,0( ( 4) =mkkijij1 其中kij 为第 k 只蚂蚁在本次循环中留在路径 ),( ji 上的信息量;ij 为本次循环中路径 ),( ji 上的信息量的增量;参数 为轨迹的持久性; 1 为轨迹衰减度,表示信息消逝程度。 对上述系统模型,采用人工蚁群方法求解的算法步骤可归结为: step 1: 0NC ( NC 为迭代步数或搜索次数) ;各ij 和ij 的初始化;将 m 个蚂蚁置于 n个顶

29、点上。 step 2:将各蚂蚁的初始出发点置于当前解集中;对每个蚂蚁 k ( mk ,2,1L= )按概率kijp 转移至下一顶点 j ;将顶点 j置于当前解集。 step 3:计算各蚂蚁的目标函数值 ),1( mkzkL= ,记录当前的最好解。 step 4:按更新方程修改轨迹强度。 step 5: 1+ NCNC ,若 NC 预定的迭代次数且无退化行为(即找到的都是相同解) ,则转 step 2。 若为了简化计算,增加处理较大规模的 TSP 问题的能力,则可将( 4)式修改为: ijijijtt +=+ )1()()1( , )1,0( 其中 =其它 ,0),(,1BEjidijkij 此

30、处 BE为本次最优路线上的边集。 6.3 人工蚁群算法性能的讨论 人工蚁群算法是一种基于种群的进化算法。作为一个新兴的研究领域,虽它还远未像 GA、 SA 等算法那样形成系统的分析方法和坚实的数学基础,但目前已有一些基本结果。 在 M. Dorigo 三种不同的模型中,循环路径 ),( ji 上信息量的增量ij 不同。 1) Ant-quantity system 模型中, +=其它之间经过和只蚂蚁在时刻若第,01, ijttkdQijkij 2)在 Ant-density system 模型中, +=其它之间经过和只蚂蚁在时刻若第,01, ijttkQkij 3)在 Ant-cycle sy

31、stem 模型中, -473-=其它过只蚂蚁在本次循环中经若第,0, ijkLQkkij 其中 Q是反映蚂蚁所留轨迹数量的常数,kL 表示第 k 只蚂蚁在本次循环中所走路径的长度;且 0=t 时, ckij=)0( , 0=kij 。算法中模型 1) 、 2)利用的是局部信息,模型 3)利用的是整体信息。 人工蚁群算法中, Q, 等参数对算法性能也有很大的影响。 值的大小表明留在每个结点上的信息量受重视的程度, 值越大,蚂蚁选择以前选过的点的可能性越大, 但过大会使搜索过早陷于局部极小点; 的大小表明启发式信息受重视的程度; Q值会影响算法的收敛速度, Q过大会使算法收敛于局部极小值,过小又会

32、影响算法的收敛速度,随问题规模的增大 Q的值也需要随之变化;蚂蚁的数目越多,算法的全局搜索能力越强,但数目加大将使算法的收敛速度减慢。 习题二十三 1用遗传算法求解下列非线性规划问题: 2221)1()2()(min += xxxf s.t. 01221+ xx 0142221+ xx2学生面试问题 高校自主招生是高考改革中的一项新生事物,现在仍处于探索阶段。某高校拟在全面衡量考生的高中学习成绩及综合表现后再采用专家面试的方式决定录取与否。 该校在今年自主招生中,经过初选合格进入面试的考生有 N 人,拟聘请老师 M 人。每位学生要分别接受 4 位老师(简称该学生的“面试组” )的单独面试。面试

33、时,各位老师独立地对考生提问并根据其回答问题的情况给出评分。由于这是一项主观性很强的评价工作,老师的专业可能不同,他们的提问内容、提问方式以及评分习惯也会有较大差异,因此面试同一位考生的“面试组”的具体组成不同会对录取结果产生一定影响。为了保证面试工作的公平性,组织者提出如下要求: ( 1)每位老师面试的学生数量应尽量均衡; ( 2)面试不同考生的“面试组”成员不能完全相同; ( 3)两个考生的“面试组”中有两位或三位老师相同的情形尽量的少; ( 4)被任意两位老师面试的两个学生集合中出现相同学生的人数尽量的少。 请回答如下问题: 问题一:设考生数 N 已知,在满足条件( 2)下,说明聘请老师

34、数 M 至少分别应为多大,才能做到任两位学生的“面试组”都没有两位以及三位面试老师相同的情形。 问题二:请根据( 1)( 4)的要求建立学生与面试老师之间合理的分配模型,并就 379=N , 24=M 的情形给出具体的分配方案(每位老师面试哪些学生)及该方案满足( 1)( 4)这些要求的情况。 问题三:假设面试老师中理科与文科的老师各占一半,并且要求每位学生接受两位文科与两位理科老师的面试,请在此假设下分别回答问题一与问题二。 问题四:请讨论考生与面试老师之间分配的均匀性和面试公平性的关系。为了保证-474- 面试的公平性,除了组织者提出的要求外,还有哪些重要因素需要考虑,试给出新的分配方案或建议。 3编写用禁忌搜索算法求解 TSP 问题的 Matlab 程序。 4编写用蚁群算法求解 TSP 问题的 Matlab 程序。 5用遗传算法求解下列非线性整数规划 5432125242322212328243Max xxxxxxxxxxz += +=200520062800622400)5,1(9905433215432154321xxxxxxxxxxxxxxxxixiL

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > UML理论/建模

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报