【优秀作业】人工鱼群优化算法
人工鱼群优化算法
一、概述
人工鱼群算法(Artificial Fish Swarm Algorithm,简称AFSA)是受鱼群行为的启发,由国内李晓磊博士于2002年提出的一种基于动物行为的群体智能优化算法,是行为主义人工智能的一个典型应用,这种算法源于鱼群的觅食行为。
在一片水域中,鱼往往能自行或尾随其它鱼,找到营养物质多的地方,因而鱼生存数目最多的地方一般就是本水域中营养物质最多的地方。人工鱼群算法根据这一特点,通过构造人工鱼来模仿鱼群的觅食、聚群、追尾及随机行为,从而实现寻优。
如何利用简便有效的方式来构造并实现这些行为将是算法实施的主要问题。
觅食行为主要认为就是循着食物多的方向游动的一种行为,在寻优算法中则是向较优方向前进的迭代方式。
在聚群行为中,为了保证生存和躲避危害,鱼会自然地聚集成群。鱼聚群时所遵守的规则有 3 条:
- 分隔规则,尽量避免与临近伙伴过于拥挤。
- 对准规则,尽量与临近伙伴的平均方向一致。
- 内聚规则,尽量朝临近伙伴的中心移动。
追尾行为就是一种向临近的最活跃者追逐的行为,在寻优算法中可以理解为是向附近的最优伙伴前进的过程。
二、人工鱼群算法
人工鱼个体的状态可表示为向量X=(x1,x2,⋯,xn)X=(x_1,x_2,\cdots,x_n)X=(x1,x2,⋯,xn),其中xi,i=1,2,⋯,nx_i,i=1,2,\cdots,nxi,i=1,2,⋯,n为欲寻优的变量,人工鱼群当前所在位置的食物浓度表示为Y=f(X)Y=f(X)Y=f(X),其中YYY为目标函数值,人工鱼个体之间的距离表示为dij=∥Xi−Xj∥d_{ij}= \parallel X_i-X_j \paralleldij=∥Xi−Xj∥;VisualVisualVisual表示人工鱼的感知距离;stepstepstep表示人工鱼移动的最大步长;δ\deltaδ为拥挤度因子;try−numbertry-numbertry−number为觅食行为尝试的最大次数。
人工鱼个体下一个状态的位置定义为:
Xnext=Xi+step×rand∥Xj−Xi∥(Xj−Xi)X_{next} = X_i + \frac{step \times rand}{\parallel X_j-X_i \parallel}(X_j - X_i) Xnext=Xi+∥Xj−Xi∥step×rand(Xj−Xi)
其中randrandrand是0-1之间的随机数,XjX_jXj是当前人工鱼视野范围内的一个位置。XjX_jXj由接下来的人工鱼的4种基本行为算法描述定义。
(1)觅食行为(Prey)
觅食行为是鱼类通过使用视觉来感受认知水中的食物浓度YiY_iYi来靠近食物的一种行为。
设人工鱼当前状态为XiX_iXi,在其感知范围内随机选择一个状态XjX_jXj,如果在求极大问题中,Yi<YjY_i < Y_jYi<Yj(或在求极小问题中,Yi>YjY_i > Y_jYi>Yj,因为极大和极小问题可以互相转换,所以以下均以极大问题讨论),则向该方向前进一步:
Xnext=Xi+step×rand∥Xj−Xi∥(Xj−Xi)X_{next} = X_i + \frac{step \times rand}{\parallel X_j-X_i \parallel}(X_j - X_i) Xnext=Xi+∥Xj−Xi∥step×rand(Xj−Xi)
反之,再重新随机选择状态XjX_jXj,判断是否满足前进条件;反复try−numbertry-numbertry−number次后,如果仍不满足前进条件,则随机移动一步。
(2)聚群行为(Swarm)
鱼类会通过靠近群体来避开危险。这也是鱼类为了保证群体的生存和躲避伤害形成的生活习性。与鸟群类似,鱼群的形成不需要首领,所以在人工鱼群算法中对人工鱼有两条规定:
- 人工鱼尽量向视野范围
$Visual$
内的小伙伴的中心位置移动。 - 人工鱼如果发现一个位置太过拥挤就不会向这个位置靠近。
设人工鱼当前状态为XiX_iXi,探索当前邻域内(即dij<Visuald_{ij}<Visualdij<Visual)的伙伴数目nfn_fnf及中心位置XcX_cXc,如果1nfYc>δYi\frac{1}{n_f}Y_c>\delta Y_inf1Yc>δYi,表明伙伴中心有较多的食物并且不太拥挤,则朝伙伴的中心位置方向前进一步:
Xnext=Xi+step×rand∥Xc−Xi∥(Xc−Xi)X_{next}=X_i + \frac{step\times rand}{\parallel X_c-X_i \parallel}(X_c-X_i ) Xnext=Xi+∥Xc−Xi∥step×rand(Xc−Xi)
否则执行觅食行为。
(3)追尾行为(Follow)
当鱼类寻找食物时,鱼群中的一条或多条鱼找到了食物,其它鱼类会通过跟随这些鱼来找到食物,这便是追尾行为。
设人工鱼当前状态为XiX_iXi,探索当前邻域内(即dij<Visuald_{ij}<Visualdij<Visual)的伙伴数目nfn_fnf及伙伴中YmaxY_{max}Ymax为最大的伙伴XmaxX_{max}Xmax,如果1nfYmax>δYi\frac{1}{n_f} Y_{max}>\delta Y_inf1Ymax>δYi,表明伙伴XmaxX_{max}Xmax的状态具有较高的食物浓度并且其周围不太拥挤,则朝伙伴XmaxX_{max}Xmax的方向前进一步:
Xnext=Xi+step×rand∥Xmax−Xi∥(Xmax−Xi)X_{next}=X_{i} + \frac{step \times rand}{\parallel X_{max}-X_i \parallel}(X_{max} - X_i) Xnext=Xi+∥Xmax−Xi∥step×rand(Xmax−Xi)
否则执行觅食行为。
(4)随机行为
随机行为的实现较简单,就是在视野中选择一个状态,然后向该方向移动,其实,它是觅食行为的一个缺省行为,即XiX_iXi的下一个位置为:
Xnext=Xi+(2×rand(1,length(Xi))−1)×VisualX_{next}=X_i+(2\times rand(1,length(X_{i}))-1)\times Visual Xnext=Xi+(2×rand(1,length(Xi))−1)×Visual
(5)行为选择
这是鱼类的生存习惯,反映出了鱼类的自主行为。在人工鱼群算法中,觅食行为奠定了算法的收敛基础,聚群行为增强了算法收敛的稳定性,追尾行为增强了算法收敛的快速性与全局性,行为选择策略则是为算法收敛的速度与稳定性提供了保障。
行为选择策略:根据所要解决的问题性质,对人工鱼当前所处的环境进行评价,从而选择一种行为。如较常用的评价方法就是选择各行为中使得向最优方向前进最大的行为,也就是各行为中使得人工鱼的下一个状态最优的行为,如果没有能使下一状态优于当前状态的行为,则采取随机行为。
三、基于人工鱼群算法的一元非线性函数寻优
一元非线性函数为:
f(x)=xsin(10πx)+2.0,x∈[−1,2]f(x) = x\sin(10\pi x)+2.0,x\in[-1,2] f(x)=xsin(10πx)+2.0,x∈[−1,2]
我们寻找max(f(x))max(f(x))max(f(x))。
本案例人工鱼数为100,感知距离为1,最大迭代次数为50,拥挤度因子为0.618,觅食最大试探次数为100,移动步长为0.1。
创建初始人工鱼群的代码如下:
function X=Init(Nfish,FieldDR)
%输入:
% Nfish 鱼群大小
% FieldDR 鱼的活动范围
%输出:
% X 产生的初始人工鱼群Nvar = size(FieldDR,2);X = zeros(Nfish,Nvar);for i=1:NfishX(i,:) = FieldDR(1,:)+(FieldDR(2,:)-FieldDR(1,:)).*rand(1,Nvar);end
end
目标函数(食物浓度函数)代码如下:
function [Y] = FoodConsistence(X)Y = X.*sin(10*pi.*X)+2;
end
距离函数代码如下:
function D = Dist(Xi,X)
%计算第i条鱼与所有鱼的位置,包括本身。col=size(X,1);D=zeros(1,col);for j=1:colD(j) = norm(Xi-X(j,:));end
end
觅食行为的代码如下:
function [Xnext,Ynext] = Prey(Xi,ii,visual,step,try_number,FieldDR,lastY)
%觅食行为
%输入:
%Xi 当前人工鱼的位置
%ii 当前人工鱼的序号
%visual 感知范围
%step 最大移动步长
%try_number 最大尝试次数
%FieldDR 各个数的上下限
%lastY 上次的各人工鱼位置的食物浓度
%输出:
%Xnext Xi人工鱼的下一个位置
%Ynext Xi人工鱼的下一个位置的食物浓度Xnext = [];Yi = lastY(ii);for i=1:try_numberXj = Xi+(2*rand(1,length(Xi))-1)*visual;Yj = FoodConsistence(Xj);if Yi<YjXnext = Xi+rand*step*(Xj-Xi)/norm(Xj-Xi);for k=1:length(Xnext)if Xnext(k)>FieldDR(2,k)Xnext(k) = FieldDR(2,k);endif Xnext(k)<FieldDR(1,k)Xnext(k) = FieldDR(1,k);endendbreak;endend%随机行为if isempty(Xnext)Xnext = Xi+(2*rand(1,length(Xi))-1)*visual;for i=1:length(Xnext)if Xnext(i)>FieldDR(i,2)Xnext(i) = FieldDR(i,2);endif Xnext(i)<FieldDR(i,1)Xnext(i) = FieldDR(i,1);endendendYnext = FoodConsistence(Xnext);
end
聚群行为的代码如下:
function[Xnext,Ynext]=Swarm(X,i,visual,step,deta,try_number,FieldDR,lastY)
% 聚群行为
%输入:
%X 所有人工鱼的位置
%i 当前人工鱼的序号
%visual 感知范围
%step 最大移动步长
%deta 拥挤度
%try_number 最大尝试次数
%FieldDR 各个数的上下限
%lastY 上次的各人工鱼位置的食物浓度
%输出:
%Xnext Xi人工鱼的下一个位置
%Ynext Xi人工鱼的下一个位置的食物浓度Xi = X(i,:);D = Dist(Xi,X);index = find(D>0 & D<visual);nf = length(index);if nf>0if length(index)==1Xc = X(index,:);elseXc = mean(X(index,:));endYc = FoodConsistence(Xc);Yi = lastY(i);if Yc/nf > deta*YiXnext = Xi+rand*step*(Xc-Xi)/norm(Xc-Xi);for i = 1:length(Xnext)if Xnext(i) > FieldDR(2,i)Xnext(i) = FieldDR(2,i);endif Xnext(i) < FieldDR(1,i)Xnext(i) = FieldDR(1,i);endendYnext = FoodConsistence(Xnext);else[Xnext,Ynext] = Prey(Xi,i,visual,step,try_number,FieldDR,lastY);endelse[Xnext,Ynext] = Prey(Xi,i,visual,step,try_number,FieldDR,lastY);end
end
追尾行为的代码如下:
function[Xnext,Ynext]=Follow(X,i,visual,step,deta,try_number,FieldDR,lastY)
% 追尾行为
%输入:
%X 所有人工鱼的位置
%i 当前人工鱼的序号
%visual 感知范围
%step 最大移动步长
%deta 拥挤度
%try_number 最大尝试次数
%FieldDR 各个数的上下限
%lastY 上次的各人工鱼位置的食物浓度
%输出:
%Xnext Xi人工鱼的下一个位置
%Ynext Xi人工鱼的下一个位置的食物浓度Xi = X(i,:);D = Dist(Xi,X);index = find(D>0 & D<visual);nf = length(index);if nf>0XX = X(index,:);YY = lastY(index);[Ymax,Max_index] = max(YY);Xmax = XX(Max_index,:);Yi = lastY(i);if Ymax/nf > deta*Yi;Xnext = Xi+rand*step*(Xmax-Xi)/norm(Xmax-Xi);for i=1:length(Xnext)if Xnext(i)>FieldDR(2,i)Xnext(i) = FieldDR(2,i);endif Xnext(i)<FieldDR(2,i)Xnext(i) = FieldDR(2,i);endendYnext = FoodConsistence(Xnext);else[Xnext,Ynext]=Prey(Xi,i,visual,step,try_number,FieldDR,lastY);endelse[Xnext,Ynext] = Prey(Xi,i,visual,step,try_number,FieldDR,lastY);end
end
人工鱼群算法代码如下:
clc
clear
close all
figure
hold on
ezplot('x*sin(10*pi*x)+2',[-1,2]);%% 参数设置
fishnum = 100; %生成100只人工鱼
MAXGEN = 50; %最多迭代次数
try_number = 100; %最多试探次数
visual = 1; %感知距离
delta = 0.618; %拥挤度因子
step = 0.1; %步长%% 初始化鱼群
FieldDR = [-1;2];
X = Init(fishnum,FieldDR);
gen = 1;
BestY = -1*ones(MAXGEN,1); %每步中最优的函数值
BestX = -1*ones(MAXGEN,1); %每步中最优的自变量
besty = -inf; %最优函数值
Y = FoodConsistence(X);%% 算法开始
while gen<=MAXGEN for i=1:fishnum%% 聚群行为[Xi1,Yi1] = Swarm(X,i,visual,step,delta,try_number,FieldDR,Y); %% 追尾行为[Xi2,Yi2] = Follow(X,i,visual,step,delta,try_number,FieldDR,Y); if Yi1>Yi2X(i,:) = Xi1;Y(i,1) = Yi1;elseX(i,:) = Xi2;Y(i,1) = Yi2;endend[Ymax,index] = max(Y); if Ymax>bestybesty = Ymax;bestx = X(index,:);BestY(gen) = Ymax;BestX(gen,:) = X(index,:);elseBestY(gen) = BestY(gen-1);BestX(gen,:) = BestX(gen-1,:);endplot(bestx,besty,'.','color',[gen/MAXGEN,0,0])disp([gen,bestx,besty]);gen = gen+1;
end
plot(bestx,besty,'ro','MarkerSize',20)
xlabel('x')
ylabel('y')
title('鱼群算法迭代过程中最优坐标移动')%% 优化过程图
figure
plot(1:MAXGEN,BestY)
xlabel('迭代次数')
ylabel('优化值')
title('鱼群算法迭代过程')
最终x=1.850585x=1.850585x=1.850585,对应最大值为fmax=3.850272f_{max}=3.850272fmax=3.850272。人工鱼群算法寻优得到最优值接近函数实际最优值,说明该算法具有较强的函数极值寻优能力。
四、基于人工鱼群算法的多元非线性函数寻优
多元非线性函数为
f(x,y)=sinxx×sinyy,x,y∈[−10,10]f(x,y) = \frac{ \sin x}{x}\times \frac{\sin y}{y},x,y\in[-10,10] f(x,y)=xsinx×ysiny,x,y∈[−10,10]
我们寻找max(f(x,y))max(f(x,y))max(f(x,y))。
[x_plot,y_plot] = meshgrid(-10:0.05:10);
z = (sin(x_plot)./x_plot).*(sin(y_plot)./y_plot);
mesh(x_plot,y_plot,z)
xlabel('第一维度x的取值范围');
ylabel('第二维度y的取值范围');
zlabel('函数值');
本案例人工鱼数为100,感知距离为2.5,最大迭代次数为50,拥挤度因子为0.618,觅食最大试探次数为100,移动步长为0.3。
其中,创建初始人工鱼群的代码,距离函数的代码,觅食行为的代码,聚群行为的代码,追尾行为的代码见第三部分。
目标函数(食物浓度函数)代码如下:
function [Y]=FoodConsistence(X)Y=(sin(X(:,1))./X(:,1)).*(sin(X(:,2))./sin(X(:,2)));
end
人工鱼群算法代码如下:
clc
clear
close all%% 参数设置
fishnum = 100; %生成100只人工鱼
MAXGEN = 50; %最多迭代次数
try_number = 100; %最多试探次数
visual = 2.5; %感知距离
delta = 0.618; %拥挤度因子
step = 0.3; %步长%% 初始化鱼群
FieldDR = repmat([-10;10],[1,2]);
X = Init(fishnum,FieldDR);
gen = 1;
BestY = -1*ones(MAXGEN,1); %每步中最优的函数值
BestX = -1*ones(MAXGEN,2); %每步中最优的自变量
besty = -inf; %最优函数值
Y = FoodConsistence(X);%% 算法开始
while gen<=MAXGENfor i=1:fishnum% 聚群行为[Xi1,Yi1] = Swarm(X,i,visual,step,delta,try_number,FieldDR,Y); % 追尾行为[Xi2,Yi2] = Follow(X,i,visual,step,delta,try_number,FieldDR,Y);if Yi1>Yi2X(i,:) = Xi1;Y(i,1) = Yi1;elseX(i,:) = Xi2;Y(i,1) = Yi2;endend[Ymax,index] = max(Y);if Ymax>bestybesty = Ymax;bestx = X(index,:);BestY(gen) = Ymax;BestX(gen,:) = X(index,:);elseBestY(gen) = BestY(gen-1);BestX(gen,:) = BestX(gen-1,:);end figure(1);hold onplot(bestx(1),bestx(2),'.','color',[gen/MAXGEN,0,0])disp([gen,bestx,besty]);gen=gen+1;
end
plot(bestx(1),bestx(2),'ro','MarkerSize',20)
xlabel('x')
ylabel('y')
title('鱼群算法迭代过程中最优坐标移动')%% 优化过程图
figure
plot(1:MAXGEN,BestY)
xlabel('迭代次数')
ylabel('优化值')
title('鱼群算法迭代过程')
最终x=−0.00099652,y=−4.29936445x=-0.00099652,y=-4.29936445x=−0.00099652,y=−4.29936445,对应最大值为fmax=0.99999983f_{max}=0.99999983fmax=0.99999983。人工鱼群算法寻优得到最优值接近函数实际最优值,说明该算法具有较强的函数极值寻优能力。
五、练习
求测试函数的最小值,以及最小值点。
1. Rastrigin function:
f(x)=An+∑i=1n[xi2−Acos(2πxi)],−5.12≤xi≤5.12f(\bm x)=A_n+\sum_{i=1}^{n}{[x_i^2-A\cos (2\pi x_i)]},-5.12\leq x_i\leq 5.12 f(x)=An+i=1∑n[xi2−Acos(2πxi)],−5.12≤xi≤5.12
当A=10,n=2A=10,n=2A=10,n=2时,如下图所示:
2. Sphere function:
f(x)=∑i=1nxi2,−∞≤xi≤∞f(\bm x) = \sum_{i=1}^{n}{x_i^2},-\infty\leq x_i \leq \infty f(x)=i=1∑nxi2,−∞≤xi≤∞
当n=2n=2n=2时,如下图所示:
3. Beale function:
f(x,y)=(1.5−x+xy)2+(2.25−x+xy2)2+(2.625−x+xy3)2,−4.5≤x,y≤4.5f(x,y)=(1.5-x+xy)^2+(2.25-x+xy^2)^2+(2.625-x+xy^3)^2,-4.5\leq x,y\leq 4.5 f(x,y)=(1.5−x+xy)2+(2.25−x+xy2)2+(2.625−x+xy3)2,−4.5≤x,y≤4.5
4. Booth function:
f(x,y)=(x+2y−7)2+(2x+y−5)2,−10≤x,y≤10f(x,y)=(x+2y-7)^2+(2x+y-5)^2,-10\leq x,y\leq 10 f(x,y)=(x+2y−7)2+(2x+y−5)2,−10≤x,y≤10
5. Bukin function:
f(x,y)=100∣y−0.01x2∣+0.01∣x+10∣,−15≤x≤−5,−3≤y≤3f(x,y)=100\sqrt{|y-0.01x^2|}+0.01|x+10|,-15\leq x\leq -5,-3\leq y\leq 3 f(x,y)=100∣y−0.01x2∣+0.01∣x+10∣,−15≤x≤−5,−3≤y≤3
6. three-hump camel function:
f(x,y)=2x2−1.05x4+x66+xy+y2,−5≤x,y≤5f(x,y)=2x^2-1.05x^4+\frac{x^6}{6}+xy+y^2,-5\leq x,y\leq 5 f(x,y)=2x2−1.05x4+6x6+xy+y2,−5≤x,y≤5
7. Hölder table function:
f(x,y)=−∣sinxcosyexp(∣1−x2+y2π∣)∣,−10≤x,y≤10f(x,y)=-|\sin x \cos y \exp(|1-\frac{\sqrt{x^2+y^2}}{\pi}|)|,-10\leq x,y\leq 10 f(x,y)=−∣sinxcosyexp(∣1−πx2+y2∣)∣,−10≤x,y≤10
目前Datawhale的开源内容分为两种:第一种是已经囊括在我们的学习路线图内的Datawhale精品课,第二种是暂未囊括在我们的学习路线图内的Datawhale打磨课。我们根据您的投票来确定精品课程的排期,打磨课程一旦完成,即可排入我们每个月的组队学习。
请选择您十二月份希望学习的Datawhale精品课程。如果某门课程超过100人选择,那么我们就邀请该课程设计者开设该课程的组队学习。
-> 插入投票
- 杨剑砺:数据可视化(Matplotlib))
- 陈安东:动手学数据分析
- 王复振:SQL编程语言
- 谢文睿:吃瓜教程——西瓜书+南瓜书
- 王茂霖:李宏毅机器学习(含深度学习)
【优秀作业】人工鱼群优化算法相关推荐
- 多目标人工秃鹫优化算法(MATLAB源码分享,智能优化算法) 提出了一种多目标版本的人工秃鹫优化算法(AVOA)
多目标人工秃鹫优化算法(MATLAB源码分享,智能优化算法) 提出了一种多目标版本的人工秃鹫优化算法(AVOA),用于多目标优化问题. AVOA的灵感来源于非洲秃鹫的生活方式. 档案.网格和领导者选择 ...
- Python实现ABC人工蜂群优化算法优化支持向量机回归模型(SVR算法)项目实战
说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 人工蜂群算法(Artificial Bee Colony, AB ...
- 基于人工兔优化算法的函数寻优和工程优化
文章目录 一.理论基础 1.人工兔优化算法 (1)绕道觅食(探索) (2)随机躲藏(开发) (3)能量收缩(从探索转向开发) 2.ARO算法伪代码 二.仿真实验与结果分析 1.函数寻优 2.工程优化 ...
- Python实现ABC人工蜂群优化算法优化支持向量机分类模型(SVC算法)项目实战
说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 人工蜂群算法(Artificial Bee Colony, AB ...
- 单目标应用:求解单仓库多旅行商问题(Single-Depot Multiple Travelling Salesman Problem, SD-MTSP)的人工兔优化算法ARO
一.算法简介 人工兔优化算法(Artificial Rabbits Optimization ,ARO)由Liying Wang等人于2022年提出,该算法模拟了兔子的生存策略,包括绕道觅食和随机躲藏 ...
- 多目标优化算法:基于非支配排序的人工兔优化算法(Non-Dominated Sorting Artificial Rabbits Optimization ,NSARO)
一.人工兔优化算法算法简介 人工兔优化算法(Artificial Rabbits Optimization ,ARO)由Liying Wang等人于2022年提出,该算法模拟了兔子的生存策略,包括绕道 ...
- 智能优化算法:人工兔优化算法-附代码
智能优化算法:人工兔优化算法 摘要:人工兔优化算法( [Artificial rabbits optimization,RSO)是 Liying Wang等 于 2022 年提出的一种新型元启发式优化 ...
- 多目标优化算法:多目标人工兔优化算法(Multi-Objective Artificial Rabbits Optimization ,MOARO)
一.人工兔优化算法算法简介 人工兔优化算法(Artificial Rabbits Optimization ,ARO)由Liying Wang等人于2022年提出,该算法模拟了兔子的生存策略,包括绕道 ...
- 【优秀作业】粒子群算法(Python)
粒子群优化算法 一.概述 粒子群优化算法(Particle Swarm Optimization,PSO)的思想来源于对鸟捕食行为的模仿,最初,Reynolds.Heppner 等科学家研究的是鸟类飞 ...
- 【优秀作业】粒子群算法
粒子群优化算法 一.概述 粒子群优化算法(Particle Swarm Optimization,PSO)的思想来源于对鸟捕食行为的模仿,最初,Reynolds.Heppner 等科学家研究的是鸟类飞 ...
最新文章
- 数据库系统概论:第六章 关系数据库理论
- php 函数有命名空间吗_一篇弄懂PHP命名空间及use的使用
- oracle 动态sql列转行_SQL Server中动态列转行
- 实现简单 codeigniter 缓存 (cache)
- django基础 第一章 环境搭建
- [中文翻译] ASP.NET 5 简介(Introducing ASP.NET 5,原作ScottGu 2015/2/23)
- 什么是狭义人工智能、通用人工智能和超级人工智能?
- 计算机怎么看c盘用户名,如何查看c盘的软件 如何查看电脑上安装在C盘的软件...
- sox 转换pcm格式采样率
- R语言风玫瑰图绘制(附代码)
- Linux之sed流编辑器
- oracle hanganalyze的用法以及trace文件分析(通过library cache pin和lock)
- uva 10246 Asterix and Obelix(最短路问题拓展 dijkstra)
- 在VM虚拟机上安装Red Hat Enterprise Linux
- win10无法安装完成若要在此计算机上,win10提示windows安装无法继续怎么办
- Fortify白盒神器20.1.1安装教程
- H5+CSS3+JS/JQ 实现京东首页
- [项目管理]工业工程理论在软件项目中的实践
- 32款实用网页开发人员必备的谷歌浏览器扩展
- js 对象的解构赋值