最佳适应算法-源程序代码

最佳适应算法-源程序代码
最佳适应算法-源程序代码

最佳适应算法源程序代码

#include

#include

//全局变量

float minsize=5;

int count1=0;

int count2=0;

#define M 10 //假定系统允许的空闲区表最大为m #define N 10 //假定系统允许的最大作业数量为n

//已分配表的定义

struct

{float address; //已分分区起始地址

float length; //已分分区长度,单位为字节

int flag; //已分配区表登记栏标志,"0"表示空栏目}used_table[N]; //已分配区表对象名

//空闲区表的定义:

struct

{float address; //空闲区起始地址

float length; //空闲区长度,单位为字节

int flag; //空闲区表登记栏标志,用"0"表示空栏目,用"1"表示未分配}free_table[M]; //空闲区表对象名

//函数声明

void initialize(void);

int distribute(int, float);

int recycle(int);

void show();

//初始化两个表

void initialize(void)

{

int a;

for(a=0; a<=N-1; a++)

used_table[a].flag=0; //已分配表的表项全部置为空表项

free_table[0].address=1000;

free_table[0].length=1024;

free_table[0].flag=1; //空闲区表的表项全部为未分配

}

//最优分配算法实现的动态分区

int distribute(int process_name, float need_length)

{

int i, k=-1; //k用于定位在空闲表中选择的未分配栏

float ads, len;

int count=0;

i=0;

while(i<=M-1) //循环找到最佳的空闲分区

{

if(free_table[i].flag==1 && need_length <=free_table[i].length)

{

count++;

if(count==1||free_table[i].length < free_table[k].length)

k=i;

}

i=i+1;

}

if(k!=-1)

{

if((free_table[k].length-need_length)<=minsize) //整个分配

{

free_table[k].flag=0;

ads=free_table[k].address;

len=free_table[k].length;

}

else

{ //切割空闲区

ads=free_table[k].address;

len=need_length;

free_table[k].address+=need_length;

free_table[k].length-=need_length;

}

i=0;

//循环寻找内存分配表中标志为空栏目的项

while(used_table[i].flag!=0)

{i=i+1;}

if(i<=N-1) //找到,在已分配区表中登记一个表项{

used_table[i].address=ads;

used_table[i].length=len;

used_table[i].flag=process_name;

count1++;

}

else //已分配区表长度不足

{

if(free_table[k].flag == 0) //将已做的整个分配撤销

{

free_table[k].flag=1;

free_table[k].address=ads;

free_table[k].length=len;

}

else //将已做的切割分配撤销

{

free_table[k].address=ads;

free_table[k].length+=len;

}

cout<<"内存分配区已满,分配失败!\n";

return 0;

}

}

else

{

cout <<"无法为该作业找到合适分区!\n";

return 0;

}

return process_name;

}

int recycle(int process_name)

{

int y=0;

float recycle_address, recycle_length;

int i, j, k; //j栏是下邻空闲区,k栏是上栏空闲区int x;

//在内存分配表中找到要回收的作业

while(y<=N-1&&used_table[y].flag!=process_name) { y=y+1;}

if(y<=N-1) //找到作业后,将该栏的标志置为'0'

{

recycle_address=used_table[y].address;

recycle_length=used_table[y].length;

used_table[y].flag=0;

count2++;

}

else //未能找到作业,回收失败

{

cout<<"该作业不存在!\n";

return 0;

}

j=k=-1;

i=0;

while(!(i>=M||(k!=-1&&j!=-1))) //修改空闲分区表

{

if(free_table[i].flag==1)

{

if((free_table[i].address+free_table[i].length)==recycle_address)

k=i; //判断是否有上邻接

if((recycle_address+recycle_length)==free_table[i].address)

j=i; //判断是否有下邻接

}

i=i+1;

}

//合并空闲区

if(k!=-1) //回收区有上邻接

{

if(j!=-1){ //回收区也有下邻接,和上下邻接合并

free_table[k].length+=free_table[j].length+recycle_length;

free_table[j].flag=0; //将第j栏的标记置为'0' }

else //不存在下邻接,和上邻接合并free_table[k].length+=recycle_length;

}

else if(j!=-1)

{ //只有下邻接,和下邻接合并free_table[j].length+=recycle_length;

free_table[j].address=recycle_address;

}

else

{ //上下邻接都没有

x=0;

while(free_table[x].flag!=0)

x=x+1; //在空闲区表中查找一个状态为'0'的栏目if(x<=M-1)

{ //找到后,在空闲分区中登记回收的内存free_table[x].address=recycle_address;

free_table[x].length=recycle_length;

free_table[x].flag=1;

}

else

{ //空闲表已满,执行回收失败

used_table[y].flag=process_name;

cout<<"空闲区已满,回收失败!\n";

return 0;

}

}

return process_name;

}

void show() //程序执行时输出模拟的内存分配回收表

{

cout<<"+++++++++++++++++++++++++++++++++++++++\n";

cout<<"+++++++ 空闲区+++++++\n";

cout<<"+++++++++++++++++++++++++++++++++++++++\n";

for(int i=0;i<=count2;i++)

if(free_table[i].flag!=0)

cout<<"初始地址:"<

cout<<"+++++++++++++++++++++++++++++++++++++++\n";

cout<<"+++++++ 已分配区++++++\n";

cout<<"+++++++++++++++++++++++++++++++++++++++\n";

for(int j=0;j

if(used_table[j].flag!=0)

cout<<"初始地址:"<

}

void main() //主函数调用各功能函数对所有工作进行测试

{

int choice; //用来选择将要进行的操作

int job_name;

float need_memory;

bool exitFlag=false;

cout<<" 动态分区分配方式的模拟\n";

cout<<"************************************\n";

cout<<"请选择操作类型:\n";

initialize(); //开创空闲区和已分配区两个表

while(!exitFlag)

{

cout<<"********************************************\n";

cout<<"** 1: 分配内存2: 回收内存**\n";

cout<<"** 3: 查看分配0: 退出**\n";

cout<<"********************************************\n";

cout<<"请输入您的操作:";

cin>>choice;

switch(choice)

{

case 0:

exitFlag=true; //退出操作

break;

case 1:

cout<<"请输入作业号和所需内存:";

cin>>job_name>>need_memory;

if(job_name!=0&&need_memory!=0)

distribute(job_name, need_memory); // 分配内存

else if(job_name==0)

cout<<"作业号不能为零!\n请重新选择操作:\n";

else if(need_memory==0)

cout<<"内存分配数不能为零!\n请重新选择操作:\n";

break;

case 2:

int ID;

cout<<"请输入您要释放的作业号:";

cin>>ID;

if(ID!=0)

recycle(ID); //回收内存

else

cout<<"作业名不能为零!\n请重新选择操作:\n";

break;

case 3:

show();

break;

}

}

}

Welcome To Download !!!

欢迎您的下载,资料仅供参考!

动态分区分配 最佳 最坏 适应算法

我伟大的母校 课程设计报告书 实践课题:动态分区分配 姓名:路人甲 学号:20XXXXXX 指导老师:路人乙 学院:计算及科学与技术学院 课程设计实践时间 2013.3.11~2013.3.22

一.课程设计的目的: 二.设计内容: 三.设计要求: 四.程序流程图 Alloc

Best_fit Worst_fit

Free Show

Main 五.源代码 #include #include #include #define Free 0 //空闲状态 #define Busy 1 //已用状态 #define OK 1 //完成 #define ERROR 0 //出错 #define MAX_length 100 //最大内存空间为100M typedef int Status; int flag;//标志 typedef struct freearea//定义一个空闲区说明表结构{ long size; //分区大小 long address; //分区地址 int state; //状态 }ElemType;//元素类型 // 线性表的双向链表存储结构

typedef struct DuLNode//结构指针 { ElemType data; struct DuLNode *prior; //前趋指针 struct DuLNode *next; //后继指针 } DuLNode,*DuLinkList;//指针链表 DuLinkList block_first; //头结点 DuLinkList block_last; //尾结点 Status alloc(int);//内存分配 Status free(int); //内存回收 Status Best_fit(int); //最佳适应算法 Status Worst_fit(int);//最差适应算法 void show();//查看分配 Status Initblock();//开创空间表 Status Initblock()//开创带头结点的内存空间链表 { block_first=(DuLinkList)malloc(sizeof(DuLNode)); block_last=(DuLinkList)malloc(sizeof(DuLNode)); block_first->prior=NULL; block_first->next=block_last; block_last->prior=block_first; block_last->next=NULL; block_last->data.address=0; block_last->data.size=MAX_length; block_last->data.state=Free; return OK; } //分配主存 Status alloc(int ch) { int request = 0; cout<<"请输入需要分配的主存大小(单位:M):"; cin>>request; if(request<0 ||request==0) { cout<<"分配大小不合适,请重试!"<

智能优化算法程序代码集锦

人工蚂蚁算法%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%% function [x,y, minvalue] = AA(func) % Example [x, y,minvalue] = AA('Foxhole') clc; tic; subplot(2,2,1); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% plot 1 draw(func); title([func, ' Function']); %初始化各参数 Ant=100;%蚂蚁规模 ECHO=200;%迭代次数 step=0.01*rand(1);%局部搜索时的步长 temp=[0,0]; %各子区间长度 start1=-100; end1=100; start2=-100; end2=100; Len1=(end1-start1)/Ant; Len2=(end2-start2)/Ant; %P = 0.2; %初始化蚂蚁位置 for i=1:Ant X(i,1)=(start1+(end1-start1)*rand(1)); X(i,2)=(start2+(end2-start2)*rand(1)); %func=AA_Foxhole_Func(X(i,1),X(i,2)); val=feval(func,[X(i,1),X(i,2)]); T0(i)=exp(-val);%初始信息素,随函数值大,信息素浓度小,反之亦 然 %%%%%***************************************** **************************** end; %至此初始化完成 for Echo=1:ECHO %开始寻优 %P0函数定义,P0为全局转移选择因子 a1=0.9; b1=(1/ECHO)*2*log(1/2); f1=a1*exp(b1*Echo); a2=0.225; b2=(1/ECHO)*2*log(2); f2=a2*exp(b2*Echo); if Echo<=(ECHO/2) P0=f1; else P0=f2; end; %P函数定义,P为信息素蒸发系数 a3=0.1; b3=(1/ECHO).*log(9); P=a3*exp(b3*Echo); lamda=0.10+(0.14-0.1)*rand(1);%全局转移步长参数Wmax=1.0+(1.4-1.0)*rand(1);%步长更新参数上限 Wmin=0.2+(0.8-0.2)*rand(1);%步长更新参数下限 %寻找初始最优值 T_Best=T0(1); for j=1:Ant if T0(j)>=T_Best T_Best=T0(j); BestIndex=j; end; end; W=Wmax-(Wmax-Wmin)*(Echo/ECHO); %局部搜索步长更新参数 for j_g=1:Ant %全局转移概率求取,当该蚂蚁随在位置不是bestindex时 if j_g~=BestIndex r=T0(BestIndex)-T0(j_g); Prob(j_g)=exp(r)/exp(T0(BestIndex)); else%当j_g=BestIndex的时候进行局部搜索 if rand(1)<0.5 temp(1,1)=X(BestIndex,1)+W*step; temp(1,2)=X(BestIndex,2)+W*step; else temp(1,1)=X(BestIndex,1)-W*step; temp(1,2)=X(BestIndex,2)-W*step; end; Prob(j_g)=0;%bestindex的蚂蚁不进行全局转移 end; X1_T=temp(1,1); X2_T=temp(1,2); X1_B=X(BestIndex,1); X2_B=X(BestIndex,2); %func1 = AA_Foxhole_Func(X1_T,X2_T); %%%%%%%%%%%********* ****************************************** %F1_T=func1; F1_T=feval(func,[X(i,1),X(i,2)]); F1_B=feval(func,[X1_B,X2_B]); %F1_T=(X1_T-1).^2+(X2_T-2.2).^2+1; %func2 = AA_Foxhole_Func(X1_B,X2_B); %%%%%%%%%%%%%******** ******************************************* %F1_B=func2; %F1_B=(X1_B-1).^2+(X2_B-2.2).^2+1; if exp(-F1_T)>exp(-F1_B) X(BestIndex,1)=temp(1,1); X(BestIndex,2)=temp(1,2); end; end; for j_g_tr=1:Ant if Prob(j_g_tr)

基于人工智能的路径查找优化算法【精品毕业设计】(完整版)

毕业设计[论文] 题目:基于人工智能的路径查找优化算法 学生姓名: Weston 学号:090171021XXX 学部(系):信息科学与技术学部 专业年级:计算机应用技术 指导教师:XXX 职称或学位: XX 2012 年 5 月 18 日

目录 摘要............................................................... II ABSTRACT ........................................................... III KEY WORDS .......................................................... III 1.前言 (1) 2.概述 (2) 2.1遗传算法优缺点 (2) 2.2遗传算法应用领域 (3) 2.3遗传算法基本流程 (3) 3.传统遗传算法解决旅行商问题 (5) 3.1常用概念 (5) 3.2基本过程 (5) 3.3关键步骤 (5) 3.4总结 (8) 4.改进后的遗传算法 (9) 4.1编码、设计遗传算子 (9) 4.2种群初始化 (9) 4.3评价 (10) 4.4选择复制 (10) 4.5交叉 (11) 4.6变异 (12) 4.7终结 (13) 5.系统设计与实现 (14) 5.1系统设计 (14) 5.2系统实现 (17) 5.3结果分析 (20) 6.总结 (21) 参考文献 (22) 致谢 (23)

基于人工智能的路径查找优化算法 摘要 旅行商是一个古老且有趣的问题它可以描述为:给定n个城市以及它们之间的距离(城市i到城市j的距离),求解从其中一个城市出发对每个城市访问,且仅访问一d ij 次,最后回到出发的城市,应当选取怎样的路线才能使其访问完所有的城市后回到初始的城市且走过的路程最短。 旅行商问题已被证明是属优化组合领域的NP难题,而且在现实中的许多问题都可以转化为旅行商问题来加以解决。解决旅行商问题最一般的方法就是枚举出所有可能的路线然后对每一条进行评估最后选取出路程最短的一条即为所求解。 解决旅行商问题的各种优化算法都是通过牺牲解的精确性来换取较少的耗时,其他一些启发式的搜索算法则依赖于特定的问题域,缺乏通用性,相比较而言遗传算法是一种通用性很好的全局搜索算法。 遗传算法GA( genetic algorithm) 最早由美国密歇根大学的John Holland 提出。具有自组织、自适应、自学习和群体进化功能有很强的解决问题的能,在许多领域都得到了应用。 遗传算法以其广泛的适应性渗透到研究与工程的各个领域,已有专门的遗传算法国际会议,每两年召开一次,如今已开了数次,发表了数千篇论文,对其基本的理论、方法和技巧做了充分的研究。今天,遗传算法的研究已成为国际学术界跨学科的热门话题之一。 关键词:人工智能;遗传算法;TSP;旅行商问题

蚁群算法TSP问题matlab源代码

function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta ,Rho,Q) %%===================================================== ==================== %% ACATSP.m %% Ant Colony Algorithm for Traveling Salesman Problem %% ChengAihua,PLA Information Engineering University,ZhengZhou,China %% Email:aihuacheng@https://www.360docs.net/doc/9c18459690.html, %% All rights reserved %%------------------------------------------------------------------------- %% 主要符号说明 %% C n个城市的坐标,n×4的矩阵 %% NC_max 最大迭代次数 %% m 蚂蚁个数 %% Alpha 表征信息素重要程度的参数 %% Beta 表征启发式因子重要程度的参数 %% Rho 信息素蒸发系数 %% Q 信息素增加强度系数 %% R_best 各代最佳路线 %% L_best 各代最佳路线的长度 %%===================================================== ==================== %%第一步:变量初始化 n=size(C,1);%n表示问题的规模(城市个数) D=zeros(n,n);%D表示完全图的赋权邻接矩阵 for i=1:n for j=1:n if i~=j D(i,j)=max( ((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5,min(abs(C(i,3)-C(j,3)),144- abs(C(i,3)-C(j,3))) );%计算城市间距离 else D(i,j)=eps; end D(j,i)=D(i,j); end end Eta=1./D;%Eta为启发因子,这里设为距离的倒数 Tau=ones(n,n);%Tau为信息素矩阵 Tabu=zeros(m,n);%存储并记录路径的生成 NC=1;%迭代计数器 R_best=zeros(NC_max,n);%各代最佳路线

首次适应算法 内存分配

操 作 系 统 实 验 报 告 课程名称:操作系统 实验题目:首次适应算法 姓名: **** 专业班级: *********** 学号: ************* 指导老师: *****

一、实验目的 在计算机系统中,为了提高内存区的利用率,必须给电脑内存区进行合理的分配。本实验通过对内存区分配方法首次适应算法的使用,来了解内存分配的模式。 二、实验要求 1.内存大小初始化 2.可以对内存区进行动态分配,采用首次适应算法来实现 3.可以对已分配的内存块进行回收,并合并相邻的空闲内存块。 三、实验内容 把一个作业装入内存,按照首次适应算法对内存区进行分配,作业结束,回收已分配给该作业的内存块,并合并相邻的空闲内存块。 四、实验结果 运行效果: 1.初始化内存区大小,并添加作业,选择1添加作业 2. 当作业大小超过存储块大小时,分配失败。 3.选择3,可查看内存分配情况 4.选择2回收内存 5.添加新作业 6.回收C作业,相邻的空闲内存块合并。 五、实验总结

首次适应算法要求空闲分区链以地址递增的次序链接。在分配内存时,从链首开始查找,直到找到一个大小能满足要求的空闲分区为止;然后按照作业大小,从该分区中划出一块内存空间分配给请求者,余下的空闲区仍留在空闲链中。若从链首到链尾都不能找到一个能满足要求的分区,则此次分配失败。这里,我采用数组的方式,模拟内存分配首次适应算法,动态的为作业分配内存块。可以根据作业名称回收已分配的内存块,当空闲内存块相邻时,则合并。 通过此次的实验,让我对内存分配中首次适应算法更加熟悉,在此基础上,我也测试最佳适应算法(best_fit)和最坏适应算法(worst_fit),并对其进行了比较分析,从比较中我发现,针对同一个问题,解决的方法不止一种,而且不同的方法所要消耗的资源和时间也不相同,根据不同的要求,方法的优劣也不同,可以说方法是解决问题的一种模式,随环境不同而体现出优越性。 六、实验附录 程序源代码: #include #include #include int neicun=200;//内存块默认大小 int fqNum=1;//已使用分区数目,进程数目=fqNum-1 #define number 100//进程数量 struct fqinfo//分区信息 { int start;//开始位置 int end;//结束位置 char name;//进程名称 int capactity;//进程大小或者分区块大小 int flag;//分区使用标记,0:未使用 1:已使用 2:回收或者合并的分区 3:尾部 }fqlist[number]; int init_neicun();//初始化内存大小 int first_fit(char name,int size);//首次适应算法 int fenpei();//为进程存储区 int showit();//显示进程 int menu();//功能菜单 int Memory_recovery();//内存回收 int exit();//退出系统

蚁群算法matlab程序代码

先新建一个主程序M文件ACATSP.m 代码如下: function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta,Rho,Q) %%================================================== ======================= %% 主要符号说明 %% C n个城市的坐标,n×2的矩阵 %% NC_max 蚁群算法MATLAB程序最大迭代次数 %% m 蚂蚁个数 %% Alpha 表征信息素重要程度的参数 %% Beta 表征启发式因子重要程度的参数 %% Rho 信息素蒸发系数 %% Q 表示蚁群算法MATLAB程序信息素增加强度系数 %% R_best 各代最佳路线 %% L_best 各代最佳路线的长度 %%================================================== =======================

%% 蚁群算法MATLAB程序第一步:变量初始化 n=size(C,1);%n表示问题的规模(城市个数) D=zeros(n,n);%D表示完全图的赋权邻接矩阵 for i=1:n for j=1:n if i~=j D(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5; else D(i,j)=eps; % i = j 时不计算,应该为0,但后面的启发因子要取倒数,用eps(浮点相对精度)表示 end D(j,i)=D(i,j); %对称矩阵 end end Eta=1./D; %Eta为启发因子,这里设为距离的倒数 Tau=ones(n,n); %Tau为信息素矩阵 Tabu=zeros(m,n); %存储并记录路径的生成

蚁群算法matlab

蚁群算法的matlab源码,同时请指出为何不能优化到已知的最好解 % % % the procedure of ant colony algorithm for VRP % % % % % % % % % % % % %initialize the parameters of ant colony algorithms load data.txt; d=data(:,2:3); g=data(:,4); m=31; % 蚂蚁数 alpha=1; belta=4;% 决定tao和miu重要性的参数 lmda=0; rou=0.9; %衰减系数 q0=0.95; % 概率 tao0=1/(31*841.04);%初始信息素 Q=1;% 蚂蚁循环一周所释放的信息素 defined_phrm=15.0; % initial pheromone level value QV=100; % 车辆容量 vehicle_best=round(sum(g)/QV)+1; %所完成任务所需的最少车数V=40; % 计算两点的距离 for i=1:32; for j=1:32;

dist(i,j)=sqrt((d(i,1)-d(j,1))^2+(d(i,2)-d(j,2))^2); end; end; %给tao miu赋初值 for i=1:32; for j=1:32; if i~=j; %s(i,j)=dist(i,1)+dist(1,j)-dist(i,j); tao(i,j)=defined_phrm; miu(i,j)=1/dist(i,j); end; end; end; for k=1:32; for k=1:32; deltao(i,j)=0; end; end; best_cost=10000; for n_gen=1:50; print_head(n_gen); for i=1:m; %best_solution=[]; print_head2(i);

人工智能之遗传算法论文含源代码

30维线性方程求解 摘要:非线性方程组的求解是数值计算领域中最困难的问题,大多数的数值求解算法例如牛顿法的收敛性和性能特征在很大程度上依赖于初始点。但是对于很多高维的非线性方程组,选择好的初始点是一件非常困难的事情。本文采用了遗传算法的思想,提出了一种用于求解非线性方程组的混合遗传算法。该混合算法充分发挥了遗传算法的群体搜索和全局收敛性。选择了几个典型非线性方程组,考察它们的最适宜解。 关键词:非线性方程组;混合遗传算法;优化 1. 引言遗传算法是一种通用搜索算法,它基于自然选择机制和自然遗传规律来模拟自然界的进化过程,从而演化出解决问题的最优方法。它将适者生存、结构化但同时又是 随机的信息交换以及算法设计人的创造才能结合起来,形成一种独特的搜索算法,把一些解决方案用一定的方式来表示,放在一起成为群体。每一个方案的优劣程度即为适应性,根据自然界进化“优胜劣汰”的原则,逐步产生它们的后代,使后代具有更强的适应性,这样不断演化下去,就能得到更优解决方案。 随着现代自然科学和技术的发展,以及新学科、新领域的出现,非线性科学在工农业、经济政治、科学研究方面逐渐占有极其重要的位置。在理论研究和应用实践中,几乎绝大多数的问题都最终能化为方程或方程组,或者说,都离不开方程和方程组的求解。因此,在非线性问题中尤以非线性方程和非线性方程组的求解最为基本和重要。传统的解决方法,如简单迭代法、牛顿法、割线法、延拓法、搜索法、梯度法、共轭方向法、变尺度法,无论从算法的选择还是算法本身的构造都与所要解决的问题的特性有很大的关系。很多情况下,算法中算子的构造及其有效性成为我们解决问题的巨大障碍。而遗传算法无需过多地考虑问题的具体形式,因为它是一种灵活的自适应算法,尤其在一些非线性方程组没有精确解的时候,遗传算法显得更为有效。而且,遗传算法是一种高度并行的算法,且算法结构简单,非常便于在计算机上实现。本文所研究的正是将遗传算法应用于求解非线性方程组的问题。 2. 遗传算法解非线性方程组为了直观地观察用遗传算法求解非线性方程组的效果,我们这里用代数非线性方程组作为求解的对象问题描述:非线性方程组指的是有n 个变量(为了简化讨论,这里只讨论实变量方程组)的方程组 中含有非线性方程。其求解是指在其定义域内找出一组数能满足方程组中的每 个方程。这里,我们将方程组转化为一个函数则求解方程组就转化为求一组值使得成立。即求使函数取得最小值0 的一组数,于是方程组求解问题就转变为函数优化问题 3. 遗传算子 遗传算子设计包括交叉算子、变异算子和选择算子的设计。

首次适应算法,最佳适应算法,最坏适应算法源代码[宝典]

首次适应算法,最佳适应算法,最坏适应算法源代码[宝典] 首次适应算法,最佳适应算法,最坏适应算法源代码#include #include #define Free 0 //空闲状态 #define Busy 1 //已用状态 #define OK 1 //完成 #define ERROR 0 //出错 #define MAX_length 640 //最大内存空间为640KBtypedef int Status; int flag; typedef struct freearea//定义一个空闲区说明表结构 { long size; //分区大小 long address; //分区地址 int state; //状态 }ElemType; // 线性表的双向链表存储结构 typedef struct DuLNode { ElemType data; struct DuLNode *prior; //前趋指针 struct DuLNode *next; //后继指针 } DuLNode,*DuLinkList; DuLinkList block_first; //头结点 DuLinkList block_last; //尾结点 Status alloc(int);//内存分配 Status free(int); //内存回收 Status First_fit(int);//首次适应算法 Status Best_fit(int); //最佳适应算法 Status Worst_fit(int); //最差适应算法

void show();//查看分配 Status Initblock();//开创空间表 Status Initblock()//开创带头结点的内存空间链表{ block_first=(DuLinkList)malloc(sizeof(DuLNode)); block_last=(DuLinkList)malloc(sizeof(DuLNode)); block_first->prior=NULL; block_first->next=block_last; block_last->prior=block_first; block_last->next=NULL; block_last->data.address=0; block_last->data.size=MAX_length; block_last->data.state=Free; return OK; } //分配主存 Status alloc(int ch) { int request = 0; cout<<"请输入需要分配的主存大小(单位:KB):"; cin>>request; if(request<0 ||request==0) { cout<<"分配大小不合适,请重试~"<

蚁群算法MATLAB代码

function [y,val]=QACStic load att48 att48; MAXIT=300; % 最大循环次数 NC=48; % 城市个数 tao=ones(48,48);% 初始时刻各边上的信息最为1 rho=0.2; % 挥发系数 alpha=1; beta=2; Q=100; mant=20; % 蚂蚁数量 iter=0; % 记录迭代次数 for i=1:NC % 计算各城市间的距离 for j=1:NC distance(i,j)=sqrt((att48(i,2)-att48(j,2))^2+(att48(i,3)-att48(j,3))^2); end end bestroute=zeros(1,48); % 用来记录最优路径 routelength=inf; % 用来记录当前找到的最优路径长度 % for i=1:mant % 确定各蚂蚁初始的位置 % end for ite=1:MAXIT for ka=1:mant %考查第K只蚂蚁 deltatao=zeros(48,48); % 第K只蚂蚁移动前各边上的信息增量为零 [routek,lengthk]=travel(distance,tao,alpha,beta); if lengthk

首次适应算法和最佳适应算法-C++语言版

#include #include using namespace std; #define Free 0 //空闲状态 #define Busy 1 //已用状态 #define OK 1 //完成 #define ERROR 0 //出错 #define MAX_length 512 //最大内存空间为512KB typedef int Status; int flag; typedef struct freearea//定义一个空闲区说明表结构{ long size; //分区大小 long address; //分区地址 int state; //状态 }ElemType; // 线性表的双向链表存储结构 typedef struct DuLNode { ElemType data; struct DuLNode *prior; //前趋指针 struct DuLNode *next; //后继指针 } DuLNode,*DuLinkList; DuLinkList block_first; //头结点 DuLinkList block_last; //尾结点 Status alloc(int);//内存分配 Status free(int); //内存回收 Status First_fit(int);//首次适应算法 Status Best_fit(int); //最佳适应算法 void show();//查看分配 Status Initblock();//开创空间表 Status Initblock()//开创带头结点的内存空间链表 { block_first=(DuLinkList)malloc(sizeof(DuLNode)); block_last=(DuLinkList)malloc(sizeof(DuLNode)); block_first->prior=NULL; block_first->next=block_last; block_last->prior=block_first; block_last->next=NULL;

基于蚁群算法的MATLAB实现

基于蚁群算法的机器人路径规划MATLAB源代码 基本思路是,使用离散化网格对带有障碍物的地图环境建模,将地图环境转化为邻接矩阵,最后使用蚁群算法寻找最短路径。 function [ROUTES,PL,Tau]=ACASPS(G,Tau,K,M,S,E,Alpha,Beta,Rho,Q) %% --------------------------------------------------------------- % ACASP.m % 基于蚁群算法的机器人路径规划 % GreenSim团队——专业级算法设计&代写程序 % 欢迎访问GreenSim团队主页→https://www.360docs.net/doc/9c18459690.html,/greensim %% --------------------------------------------------------------- % 输入参数列表 % G 地形图为01矩阵,如果为1表示障碍物 % Tau 初始信息素矩阵(认为前面的觅食活动中有残留的信息素) % K 迭代次数(指蚂蚁出动多少波) % M 蚂蚁个数(每一波蚂蚁有多少个) % S 起始点(最短路径的起始点) % E 终止点(最短路径的目的点) % Alpha 表征信息素重要程度的参数 % Beta 表征启发式因子重要程度的参数 % Rho 信息素蒸发系数 % Q 信息素增加强度系数 % % 输出参数列表 % ROUTES 每一代的每一只蚂蚁的爬行路线 % PL 每一代的每一只蚂蚁的爬行路线长度 % Tau 输出动态修正过的信息素 %% --------------------变量初始化---------------------------------- %load D=G2D(G); N=size(D,1);%N表示问题的规模(象素个数) MM=size(G,1); a=1;%小方格象素的边长 Ex=a*(mod(E,MM)-0.5);%终止点横坐标 if Ex==-0.5 Ex=MM-0.5; end Ey=a*(MM+0.5-ceil(E/MM));%终止点纵坐标 Eta=zeros(1,N);%启发式信息,取为至目标点的直线距离的倒数 %下面构造启发式信息矩阵 for i=1:N

C45算法的源代码全解

)数据挖掘分类算法之决策树(zz Decision tree决策树()以实例为基础的归纳学习算法。决策树是 它从一组无次序、无规则的元组中推理出决策树表示形式的分类规则。它采 并根据不同的用自顶向下的递归方式,在决策树的内部结点进行属性值的比较,该结点向下分支,叶结点是要学习划分的类。从根到叶结点的一条路属性值从径就对应着一条合取规则,整个决策树就对应着一组析取表达式规则。1986年又ID3算法的基础上,1993年QuinlanQuinlan提出了著名的ID3算法。在提出了若干改提出了C4.5算法。为了适应处理大规模数据集的需要,后来又SPRINT (scalable 进的算法,其中SLIQ(super-vised learning in quest)和是比较有代表性的两个算法。parallelizableinduction of decision trees) (1) ID3算法算法的核心是:在决策树各级结点上选择属性时,用信息增益 ID3)作为属性的选择标准,以使得在每一个非叶结点进行测(information gain 检测所有的属性,其具体方法是:试时,能获得关于被测试记录最大的类别信息。再对由该属性的不同取值建立分支,选择信息增益最大的属性产生决策树结点,直到所有子集仅包含同一各分支的子集递归调用该方法建立决策树结点的分支,类别的数据为止。最后得到一棵决策树,它可以用来对新的样本进行分类。某属性的信息增益按下列方法计算。通过计算每个属性的信息增益,并比较 它们的大小,就不难获得具有最大信息增益的属性。个m个不同值,定义mS 设是s个数据样本的集合。假定类标号属性具有中的样本数。对一个给定的样本分类所需si是类Ci不同类Ci(i=1,…,m)。设的期望信息由下式给出:为底,其原2Ci 其中pi=si/s的概率。注意,对数函数以是任意样本属于因是信息用二进制编码。个划分为v可以用属性A将Sv 设属性A具有个不同值{a1,a2,……,av}。aj上具有相同的值A,其中Sj中的样本在属性子集 {S1,S2,……,Sv}(j=1,2,……,v)。设sij是子集Sj中类Ci的样本数。由A 划分成子集的熵或信息期望由下式给出: 熵值越小,子集划分的纯度越高。对于给定的子集Sj,其信息期望为 其中pij=sij/sj 是Sj中样本属于Ci的概率。在属性A上分枝将获得的信息增益是 Gain(A)= I(s1, s2, …,sm)-E(A) ID3算法的优点是:算法的理论清晰,方法简单,学习能力较强。其缺点是:决策树可当训练数据集加大时,且对噪声比较敏感,只对比较小的数据集有效,能会随之改变。算法(2) C4.5 ID3 C4.5算法继承了算法的优点,并在以下几方面对ID3算法进行了改进:用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值1)

(完整版)蚁群算法matlab程序实例整理

function [y,val]=QACS tic load att48 att48; MAXIT=300; % 最大循环次数 NC=48; % 城市个数 tao=ones(48,48);% 初始时刻各边上的信息最为1 rho=0.2; % 挥发系数 alpha=1; beta=2; Q=100; mant=20; % 蚂蚁数量 iter=0; % 记录迭代次数 for i=1:NC % 计算各城市间的距离 for j=1:NC distance(i,j)=sqrt((att48(i,2)-att48(j,2))^2+(att48(i,3)-att48(j,3))^2); end end bestroute=zeros(1,48); % 用来记录最优路径 routelength=inf; % 用来记录当前找到的最优路径长度 % for i=1:mant % 确定各蚂蚁初始的位置 % end for ite=1:MAXIT for ka=1:mant %考查第K只蚂蚁 deltatao=zeros(48,48); % 第K只蚂蚁移动前各边上的信息增量为零 [routek,lengthk]=travel(distance,tao,alpha,beta); if lengthk

优化算法、智能算法、智能控制技术的特点和应用

优化算法、智能算法、智能控制技术的特点和应用 在建立了以频域法为主的经典控制理论的基础上,智能控制技术逐步发展。随着信息技术的进步新方法和新技术进入工程化、产品化阶段。这对自动控制理论技术提出了新的挑战,促进了智能理论在控制技术中的应用。下面介绍了优化算法、智能算法、智能控制技术的特点及应用。 优化算法特点及应用 什么是优化?就是从各种方案中选取一个最好的。从数学角度看,优化理论就是研究如何在状态空间中寻找到全局最优点。优化算法通常用来处理问题最优解的求解,这个问题有多个变量共同决定的优化算法的一个特点往往给出的是一个局部最优解,不是绝对的最优解,或者说全局最优解。一种优化算法是否有用很大程度取决问题本身,如果问题本身就是比较无序的,或许随机搜索是最有效的。常用有3种优化算法:遗传算法、蚁群算法、免疫算法等。 遗传算法是一种基于模拟遗传机制和进化论的并行随机搜索优化算法。遗传算法在控制领域中,已被用于研究离散时问最优控制、方程的求解和控制系统的鲁棒稳定问题等。遗传算法用来训练神经网络权值,对控制规则和隶属度函数进行优化,也可用来优化网络结构。 蚁群算法是群体智能的典型实现,是一种基于种群寻优的启发式搜索算法。蚁群算法小仅能够智能搜索、全局优化,而具有鲁棒性、正反馈、分布式计算、易与其它算法结合等特点。等人将蚁群算法先后应用于旅行商问题、资源二次分配问题等经典优化问题,得到了较好的效果。在动态环境下,蚁群算法也表现出高度的灵活性和健壮性,如在集成电路布线设计、电信路山控制、交通建模及规划、电力系统优化及故障分析等方面都被认为是目前较好的算法之一。 智能算法的特点及应用 智能计算也有人称之为“软计算”。是人们受生物界的启迪,根据其原理,模仿求解的算法。智能计算的思想:利用仿生原理进行设计(包括设计算法)。常用的智能算法:1)人工神经网络算法、2)遗传算法、3)模拟退火算法、4)群集智能算法。其应用领域有:神经元和局

蚁群算法最短路径通用Matlab程序(附图)

蚁群算法最短路径通用Matlab程序(附图) function [ROUTES,PL,Tau]=ACASP(G,Tau,K,M,S,E,Alpha,Beta,Rho,Q) %% --------------------------------------------------------------- % ACASP.m % 蚁群算法动态寻路算法 % ChengAihua,PLA Information Engineering University,ZhengZhou,China % Email:aihuacheng@https://www.360docs.net/doc/9c18459690.html, % All rights reserved %% --------------------------------------------------------------- % 输入参数列表 % G 地形图为01矩阵,如果为1表示障碍物 % Tau 初始信息素矩阵(认为前面的觅食活动中有残留的信息素) % K 迭代次数(指蚂蚁出动多少波) % M 蚂蚁个数(每一波蚂蚁有多少个) % S 起始点(最短路径的起始点) % E 终止点(最短路径的目的点) % Alpha 表征信息素重要程度的参数 % Beta 表征启发式因子重要程度的参数 % Rho 信息素蒸发系数 % Q 信息素增加强度系数 % % 输出参数列表 % ROUTES 每一代的每一只蚂蚁的爬行路线 % PL 每一代的每一只蚂蚁的爬行路线长度 % Tau 输出动态修正过的信息素 %% --------------------变量初始化---------------------------------- %load D=G2D(G); N=size(D,1);%N表示问题的规模(象素个数) MM=size(G,1); a=1;%小方格象素的边长 Ex=a*(mod(E,MM)-0.5);%终止点横坐标 if Ex==-0.5 Ex=MM-0.5; end Ey=a*(MM+0.5-ceil(E/MM));%终止点纵坐标 Eta=zeros(1,N);%启发式信息,取为至目标点的直线距离的倒数 %下面构造启发式信息矩阵 for i=1:N if ix==-0.5

相关文档
最新文档