基于matlab的模拟退火法
基于模拟退火算法的任务调度策略优化研究

基于模拟退火算法的任务调度策略优化研究随着人工智能技术的发展,任务调度成为企业管理中的重要问题之一。
针对不同的任务类型和资源瓶颈,企业需要制定适合的任务调度策略。
然而,在现实情况下,制定最优的任务调度策略是非常困难的。
因此,基于模拟退火算法的任务调度策略优化研究,成为了一个备受关注的领域。
一、模拟退火算法概述模拟退火算法(Simulated Annealing, SA)是一种基于概率的全局优化算法。
SA模拟了固体物体在加热冷却过程中的行为,将来自统计物理学的理论和方法应用于解决优化问题。
SA算法是一种可以克服局部极小值陷阱的优化算法,适用于解决有很多局部最优解的、复杂的、大规模的优化问题。
二、任务调度优化问题描述在任务调度优化问题中,假设有n个任务需要完成,并且有m个可用资源可以被分配使用。
每个任务的运行需要特定的资源和时间。
各种资源不能同时处理两个任务。
任务调度问题就是确定如何为每个任务分配资源,以便使任务总运行时间最小。
三、基于模拟退火算法的任务调度优化模拟退火算法是一种全局优化算法。
它适用于解决具有多个极小值的复杂问题。
任务调度优化问题在实际应用中为NP难问题。
利用模拟退火算法进行任务调度优化的基本思想是首先将问题转化为一个数学模型,然后通过模拟退火的过程寻求全局最优解。
具体地,任务调度问题可以表示为一个图论优化问题,其中任务和资源之间的约束可以用一个图G表示。
每个任务和每个可用资源在图G中都表示为一个节点。
如果任务i需要资源j,那么在节点i和节点j之间就会有一条边。
任务调度问题就是要找出图G的最小在连通子图,其保证了所有任务都被完成,同时所有可用资源也被尽可能多地用到。
模拟退火算法的具体流程如下:1.初始化温度T和初始解S0;2.产生一组新解Si,计算函数值E(Si)和E(Si-1);3.如果E(Si)<E(Si-1),接受Si作为新的现行解;4.如果E(Si)>E(Si-1),以一定概率接受Si作为新解;5.降温;6.判断终止条件是否达到。
matlab带约束模拟退火算法

【文章】matlab带约束模拟退火算法深入探讨和分析matlab带约束模拟退火算法在现代科学和工程领域,优化问题是十分常见的。
而其中,约束优化问题更是一种常见的形式。
为了解决这类问题,人们经过长时间的探索,提出了许多方法,其中模拟退火算法便是一种被广泛应用的优化算法之一。
而在matlab中,带约束的模拟退火算法更是得到了丰富的实现和应用。
本文将从简单到复杂,由浅入深地介绍matlab带约束模拟退火算法,以帮助读者更好地理解和掌握这一优化方法。
1. 什么是模拟退火算法?模拟退火算法是一种基于模拟退火过程的全局优化算法。
它模拟了金属在高温下退火时的物理过程,通过不断降低系统的温度来寻找全局最优解。
在matlab中,模拟退火算法通常通过设置初始温度、终止温度、温度下降率等参数来实现。
2. 为什么需要约束?在实际问题中,许多优化问题都存在着一定的约束条件。
比如工程设计中的材料强度、生产计划中的资源限制等。
如何在求解优化问题时满足这些约束条件便成为了一个重要的问题。
3. matlab带约束模拟退火算法是如何工作的?在matlab中,带约束的模拟退火算法通过引入罚函数、拉格朗日乘子等方法来处理约束条件。
它不仅要寻找全局最优解,还要确保解满足一定的约束条件。
这就需要在温度下降的过程中,不断调整解的位置,以在搜索最优解的同时满足约束条件。
4. 代码实现及应用在matlab中,带约束的模拟退火算法通常通过调用现成的优化工具箱来实现。
我们可以通过设置目标函数、约束条件等参数,来对不同的优化问题进行求解。
可以用该算法来求解工程设计中的优化问题、生产计划中的调度优化问题等。
总结回顾通过本文的介绍,我们对matlab带约束模拟退火算法有了一个较为全面的了解。
我们知道了模拟退火算法是如何工作的,以及在matlab中如何处理带约束的优化问题。
在实际应用中,我们可以根据具体的问题,合理地设置参数和约束条件,来求解复杂的优化问题。
数学建模B题标准答案

2011数学建模B题标准答案承诺书我们仔细阅读了中国大学生数学建模竞赛的竞赛规则.我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话、电子邮件、网上咨询等)与队外的任何人(包括指导教师)研究、讨论与赛题有关的问题。
我们知道,抄袭别人的成果是违反竞赛规则的, 如果引用别人的成果或其他公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和参考文献中明确列出。
我们郑重承诺,严格遵守竞赛规则,以保证竞赛的公正、公平性。
如有违反竞赛规则的行为,我们将受到严肃处理。
我们参赛选择的题号是(从A/B/C/D中选择一项填写): B我们的参赛报名号为(如果赛区设置报名号的话):所属学校(请填写完整的全名):北京大学参赛队员(打印并签名) :1. 姚胜献2. 许锦敏3. 刘迪初指导教师或指导教师组负责人(打印并签名):刘业辉日期: 2011 年 9 月 12日赛区评阅编号(由赛区组委会评阅前进行编号):编号专用页赛区评阅编号(由赛区组委会评阅前进行编号):全国统一编号(由赛区组委会送交全国前编号):全国评阅编号(由全国组委会评阅前进行编号):交巡警服务平台的设置与调度摘要本文通过建立整数规划模型,解决了分配各平台管辖范围、调度警务资源以及合理设置交巡警服务平台这三个方面的问题;通过建立线性加权评价模型定量评价了某市现有交巡警服务平台设置方案的合理性,并根据各个区对服务平台需求量的不同,提出了重新分配全市警力资源的解决方案。
在计算交巡警服务平台到各个路口节点的路程时,使用了图论里的floyd算法。
针对问题一的第一个子问题,首先假设交巡警服务平台对某个路口节点的覆盖度是二元的,引入决策变量,建立了0-1整数规划模型。
交巡警出警应体现时间的紧迫性,所以选择平均每个突发事件的出警时间最短作为目标函数,运用基于MATLAB的模拟退火算法进行求解,给出了中心城区A的20个服务平台的管辖范围,求得平均每个案件的出警时间为1.013分钟。
使用matlab实现模拟退火算法

使用matlab实现模拟退火算法标题:使用MATLAB实现模拟退火算法:优化问题的全局搜索方法引言:模拟退火算法(Simulated Annealing)是一种经典的全局优化算法,常用于解决各种实际问题,如组合优化、参数优化、图形分割等。
本文将详细介绍如何使用MATLAB实现模拟退火算法,并介绍其原理、步骤以及代码实现。
1. 模拟退火算法简介模拟退火算法借鉴了金属退火的物理过程,在解空间中进行随机搜索,用于找到全局最优解。
其核心思想是通过接受一定概率的劣解,避免陷入局部极小值,从而实现全局优化。
2. 模拟退火算法步骤2.1 初始参数设置在使用MATLAB实现模拟退火算法之前,我们需要配置一些初始参数,包括起始温度、终止温度、温度衰减系数等。
这些参数的合理设定对算法的效果至关重要。
2.2 初始解的生成在模拟退火算法中,我们需要随机生成一个初始解,作为搜索的起点。
这个初始解可以是随机生成的,也可以是根据问题本身的特性生成的。
2.3 判定条件模拟退火算法需要一个判定条件来决定是否接受新解。
通常我们使用目标函数值的差异来评估新解的优劣。
如果新解更优,则接受;否则,按照一定概率接受。
2.4 温度更新模拟退火算法中最重要的一步是对温度的更新。
温度越高,接受劣解的概率就越大,随着迭代的进行,温度逐渐降低,最终达到终止温度。
2.5 迭代过程在每次迭代中,我们通过随机生成邻近解,计算其目标函数值,并根据判定条件决定是否接受。
同时,根据温度更新的规则调整温度。
迭代过程中,不断更新当前的最优解。
3. MATLAB实现模拟退火算法在MATLAB中,我们可以通过编写函数或使用内置函数来实现模拟退火算法。
具体的实现方法取决于问题的复杂度和求解的要求。
我们需要确保代码的可读性和可复用性。
4. 示例案例:TSP问题求解为了演示模拟退火算法的实际应用,我们将以旅行商问题(Traveling Salesman Problem,TSP)为例进行求解。
matlab模拟退火法

模拟退火算法是一种基于物理中退火过程的优化算法,适用于解决全局优化问题。
以下是一个基本的MATLAB模拟退火算法实现示例:
matlab
function SA()
% 参数设置
T = 1000; % 初始温度
alpha = 0.95; % 降温系数
x = rand(1,10); % 初始解
f = @(x) sum(x.^2 - 10*cos(2*pi*x) + 10); % 目标函数
while T > 1e-5
% 随机生成新解
x_new = x + randn(1,10);
% 计算新解的函数值
f_new = f(x_new);
% 计算接受概率
p = exp(-(f_new - f(x))/T);
% 以概率p接受新解,否则拒绝
if rand() < p
x = x_new;
f = f_new;
end
% 降温
T = T*alpha;
end
% 输出最优解和最优值
fprintf('最优解:%f\n', x);
fprintf('最优值:%f\n', f);
end
这个示例中,我们定义了一个目标函数f,它是一个简单的多峰函数。
我们使用一个随机生成的初始解作为初始解x,然后在一个循环中不断生成新的解,并计算其函数值。
我们根据接受概率决定是否接受新解,如果新解更好,则接受;否则,我们以一定的概率接受新解。
在每次迭代中,我们都会降低温度T,直到达到预设的终止条件。
最后,我们输出最优解和最优值。
matlab量子退火算法

在MATLAB中使用量子退火算法(Quantum Annealing)可以借助QuaRL(Quantum Artificial Intelligence Toolbox for Reinforcement Learning)工具箱来实现。
QuaRL是MATLAB的一个量子计算工具箱,专门用于开发和测试基于量子计算的算法。
以下是在MATLAB中使用量子退火算法的一般步骤:1.安装QuaRL工具箱:确保您已在MATLAB中安装了QuaRL工具箱。
您可以从MathWorks官方网站下载并安装该工具箱。
2.导入必要的库:在MATLAB代码中导入QuaRL工具箱以及其他所需的库。
matlabCopy Codeimport rl.quarl.*3.定义问题:根据要解决的问题,构建适当的量子优化模型。
这可能涉及定义目标函数、约束条件等。
4.配置量子退火参数:设置量子退火算法的相关参数,例如温度、退火速率、量子比特数等。
matlabCopy Codeoptions = saoptimset('AnnealingFcn', @quantumAnnealing);options.AnnealingParameters = [temperature, annealingRate];5.运行量子退火算法:使用simulannealbnd函数运行量子退火算法,并获取结果。
matlabCopy Code[x, fval, exitFlag, output] = simulannealbnd(problem, x0, lb, ub, options);其中,problem是问题定义的函数句柄,x0是初始解,lb和ub是变量的下限和上限,options 包含了问题的设置。
6.分析结果:根据算法运行后得到的结果,进行进一步的分析和评估。
请注意,量子退火算法需要与适当的量子计算设备或模拟器配合使用。
在MATLAB中,您可以使用QuaRL工具箱提供的量子计算模拟器来模拟量子退火算法的执行。
如何在Matlab中进行模拟退火算法的优化

如何在Matlab中进行模拟退火算法的优化模拟退火算法是一种用于求解复杂问题的全局优化算法。
在Matlab中,我们可以利用其强大的数值计算和优化工具箱来实现模拟退火算法的优化。
本文将介绍如何在Matlab中进行模拟退火算法的优化,并通过一个实际的案例来演示其应用。
一、模拟退火算法简介模拟退火算法是一种启发式的全局优化算法,模拟了固体物体在退火过程中的特性。
其基本原理是通过模拟固体退火过程,逐渐降低系统能量,从而找到全局最优解。
在模拟退火算法中,由于退火过程中存在较高的温度,使算法有机会跳出局部极小值点,因此能够在搜索空间中全面地寻找最优解。
二、Matlab中的模拟退火算法优化函数Matlab提供了优化工具箱,在其中包含了一系列优化函数,其中包括模拟退火算法。
我们可以使用"simulannealbnd"函数来在Matlab中实现模拟退火算法的优化。
三、案例演示:函数最优化假设我们要求解以下函数的最小值:f(x) = x^2 + sin(5x)我们可以使用Matlab中的模拟退火算法优化函数来找到该函数的全局最小值。
1. 定义目标函数首先,我们需要在Matlab中定义目标函数:function y = myfunc(x)y = x.^2 + sin(5*x);2. 编写优化代码接下来,我们可以编写优化代码,利用"simulannealbnd"函数进行模拟退火算法的优化:options = saoptimset('Display','iter','TolFun',1e-6);[x,fval] = simulannealbnd(@myfunc, [-10,10],[],[],options);在上述代码中,"options"用于设置优化选项,"@myfunc"是要优化的目标函数,[-10,10]为变量的取值范围,[]表示无约束条件。
matlab寻优算法 -回复

matlab寻优算法-回复Matlab 寻优算法在数学和工程领域,寻找最优解是一个重要的问题。
寻优算法的目标是找到一个输入的最佳组合,以满足一组预定的条件。
这些条件可以是最大值、最小值、最低成本、最小误差等等。
在Matlab 环境中,有许多寻优算法可供选择,如遗传算法、粒子群优化算法、模拟退火算法等。
本文将重点介绍这些算法的原理和使用方法。
遗传算法(Genetic Algorithm)是一种通过模拟生物进化过程来进行优化的方法。
它模拟了自然界中的基因组合和适应度评估的过程。
遗传算法包括三个基本操作:选择、交叉和变异。
选择操作基于适应度函数,选择个体带有更好的适应性。
交叉操作模拟性繁殖,将两个个体的染色体组合成新的个体。
变异操作引入随机性,通过改变染色体的基因来产生新的个体。
遗传算法的优点是能够在搜索空间中找到全局最优解,但计算开销较大。
粒子群优化算法(Particle Swarm Optimization)是一种模拟鸟群或鱼群行为的算法。
每个个体(粒子)都有一组可能解,并通过更新当前解和最优解来搜索最优解。
每个粒子的移动速度受到自身最佳解和全局最佳解的吸引力影响。
算法从一组随机解开始,通过更新速度和位置来不断搜索最佳解。
粒子群优化算法的优点是运算速度快,但可能会陷入局部最优解。
模拟退火算法(Simulated Annealing)是通过模拟金属退火过程来进行搜索的算法。
它模拟了将物质加热然后缓慢冷却的过程,以求得最佳解。
算法从一个随机解开始,通过接受比当前解差的解来进行状态转移。
在搜索过程中,算法逐渐降低接受差解的概率,以便更好地收敛到最佳解。
模拟退火算法的优点是能够处理比较复杂的寻优问题,但需要合适的参数设置。
在Matlab 中,这些寻优算法都有相应的工具箱可以使用。
可以使用Genetic Algorithm and Direct Search Toolbox 来实现遗传算法,使用Particle Swarm Optimization Toolbox 来实现粒子群优化算法,使用Global Optimization Toolbox 来实现模拟退火算法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于matlab的模拟退火法编写一个matlab的程序用模拟退火法求函数最优解function [xo,fo] = Opt_Simu(f,x0,l,u,kmax,q,TolFun)% 模拟退火算法求函数f(x)的最小值点,且l <= x <= u% f为待求函数,x0为初值点,l,u分别为搜索区间的上下限,kmax为最大迭代次数% q为退火因子,TolFun为函数容许误差%%%%算法第一步根据输入变量数,将某些量设为缺省值if nargin < 7TolFun = 1e-8;endif nargin < 6q = 1;endif nargin < 5kmax = 100;end%%%%算法第二步,求解一些基本变量N = length(x0); %自变量维数x = x0;fx = feval(f,x); %函数在初始点x0处的函数值xo = x;fo = fx;%%%%%算法第三步,进行迭代计算,找出近似全局最小点for k =0:kmaxTi = (k/kmax)^q;mu = 10^(Ti*100); % 计算mudx = Mu_Inv(2*rand(size(x))-1,mu).*(u - l);%步长dxx1 = x + dx; %下一个估计点x1 = (x1 < l).*l +(l <= x1).*(x1 <= u).*x1 +(u < x1).*u; %将x1限定在区间[l,u]上fx1 = feval(f,x1);df = fx1- fx;if df < 0||rand < exp(-Ti*df/(abs(fx) + eps)/TolFun) %如果fx1<fx或者概率大于随机数z x = x1;fx = fx1;endif fx < foxo = x;fo = fx1;endendfunction x = Mu_Inv(y,mu)x = (((1+mu).^abs(y)- 1)/mu).*sign(y);******************************************************************************* ****************************************************************************8SA的算法很简单!最好自己编!有助于理解!给你一个!网上找的!很纯的SA!可以用!主程序:%J. C. Spall, March 1999%Written in support of text, Introduction to Stochastic Search and Optimization, 2003 %Simulated annealing code. Uses geometric decay of temperature.%Provides two ways of dealing with noisy%loss measurements: one is by using the tau coefficient to alter the%decision criterion and the other is by simple averaging of the loss%measurements.%p=10;theta_0=2*3.1338*ones(p,1);sigma=0; %standard dev. of meas. noiseSTexamp6(theta_0)n=2401; %total no. of loss measurements(iterations/lossavg)niter=100; %no. of iters. per temp. settingbk=1; %"Boltzmann's constant"lambda=.90; %cooling rate (<=1)scalpert=1; %scale factor on pertubation to%to current theta valuetau=0; %adjustment for noise in key decision statement for accept/rej. update randn('seed',1111113)rand('seed',31415927)cases=1;lossavg=1; %number of loss functions averaged if noisy loss meas. (choose s.t.%(n-lossavg) is divisible by niter*lossavg)cumloss=0;for i=1:casesT=2; %initial temperaturetheta=theta_0;E_old=STexamp6(theta)+sum(sigma*randn(lossavg,1))/lossavg;%this statement simulates collecting an average of%of 'lossavg' independent loss measurements (counts against%"budget" of n loss measurements)for j=1n-lossavg)/(niter*lossavg) %accounts for 'lossavg' measurements used above for k=1:niterperturb=scalpert*T*randn(p,1);E_new=STexamp6(theta+perturb)+...sum(sigma*randn(lossavg,1))/lossavg;%average of 'lossavg' loss measurements (simulated as in E_old)if E_new < E_old + tautheta=theta+perturb;E_old=E_new;elseprob=exp(-(E_new-E_old-tau)/(bk*T)); %criterion includes tau for noisy measurements test=rand;if test < probtheta=theta+perturb;E_old=E_new;elseendendendT=lambda*T;endthetaSTexamp6(theta)cumloss=(i-1)*cumloss/i+STexamp6(theta)/i;endcumloss子程序STexamp6.m:function y=STexamp6(x)y=1.8+(1.2+x).^2liuhd_jeremy金鱼精华贴4注:此遗传算法程序为我的一个好友廖哥提供,在此对他表示真诚地感谢!六遗传算法程序:说明: fga.m 为遗传算法的主程序; 采用二进制Gray编码,采用基于轮盘赌法的非线经验值392美味虾74注册日期2005-6-19最近登陆2012-8-11来自电气大本营状态性排名选择, 均匀交叉,变异操作,而且还引入了倒位操作!function[BestPop,Trace]=fga(FUN,LB,UB,er anum,popsize,pCross,pMutation,pI nversion,options)%[BestPop,Trace]=fmaxga(FUN,LB,UB,er anum,popsize,pcross,pmutation)% Finds a maximum of a function of several variables.% fmaxga solves problems of the form:% max F(X) subject to: LB <= X <= UB% BestPop - 最优的群体即为最优的染色体群% Trace - 最佳染色体所对应的目标函数值% FUN - 目标函数% LB - 自变量下限% UB - 自变量上限% eranum - 种群的代数,取100--1000(默认200)% popsize - 每一代种群的规模;此可取50--200(默认100)% pcross - 交叉概率,一般取0.5--0.85之间较好(默认0.8)% pmutation - 初始变异概率,一般取0.05-0.2之间较好(默认0.1)% pInversion - 倒位概率,一般取0.05-0.3之间较好(默认0.2)% options - 1*2矩阵,options(1)=0二进制编码(默认0),option(1)~=0十进制编%码,option(2)设定求解精度(默认1e-4)%%------------------------------------------------------------------------T1=clock;if nargin<3, error('FMAXGA requires at least three input arguments'); endif nargin==3, eranum=200;popsize=100;pCross=0.8 ;pMutation=0.1;pInversion=0.15;optio ns=[0 1e-4];endif nargin==4, popsize=100;pCross=0.8;pMutation=0 .1;pInversion=0.15;options=[01e-4];endif nargin==5, pCross=0.8;pMutation=0.1;pInversion =0.15;options=[0 1e-4];endif nargin==6, pMutation=0.1;pInversion=0.15;optio ns=[0 1e-4];endif nargin==7, pInversion=0.15;options=[0 1e-4];end if find((LB-UB)>0)error('数据输入错误,请重新输入(LB<UB):');ends=sprintf('程序运行需要约%.4f 秒钟时间,请稍等......',(eranum*popsize/1000)); disp(s);global m n NewPop children1 children2 VarNumbounds=[LB;UB]';bits=[];VarNum=siz e(bounds,1);precision=options(2);%由求解精度确定二进制编码长度bits=ceil(log2((bounds(:,2)-bounds(:,1 ))' ./ precision));%由设定精度划分区间[Pop]=InitPopGray(popsize,bits);%初始化种群[m,n]=size(Pop);NewPop=zeros(m,n);children1=zeros(1,n);children2=zeros(1,n);pm0=pMutation;BestPop=zeros(eranum,n);%分配初始解空间BestPop,TraceTrace=zeros(eranum,length(bits)+1); i=1;while i<=eranumfor j=1:mvalue(j)=feval(FUN(1,:),(b2f(Pop(j,:),b ounds,bits)));%计算适应度end[MaxValue,Index]=max(value);BestPop(i,:)=Pop(Index,:);Trace(i,1)=MaxValue;Trace(i,(2:length(bits)+1))=b2f(BestPo p(i,:),bounds,bits);[selectpop]=NonlinearRankSelect(FUN, Pop,bounds,bits);%非线性排名选择[CrossOverPop]=CrossOver(selectpop, pCross,round(unidrnd(eranum-i)/eranu m));%采用多点交叉和均匀交叉,且逐步增大均匀交叉的概率%round(unidrnd(eranum-i)/eranum)[MutationPop]=Mutation(CrossOverPop ,pMutation,VarNum);%变异[InversionPop]=Inversion(MutationPop ,pInversion);%倒位Pop=InversionPop;%更新pMutation=pm0+(i^4)*(pCross/3-pm0 )/(eranum^4);%随着种群向前进化,逐步增大变异率至1/2交叉率p(i)=pMutation;i=i+1;endt=1:eranum;plot(t,Trace(:,1)');title('函数优化的遗传算法');xlabel('进化世代数(eranum)');ylabel('每一代最优适应度(maxfitness)');[MaxFval,I]=max(Trace(:,1));X=Trace(I,(2:length(bits)+1));hold on; plot(I,MaxFval,'*');text(I+5,MaxFval,['FMAX='num2str(MaxFval)]);str1=sprintf('进化到%d 代,自变量为%s 时,得本次求解的最优值%f\n对应染色体是:%s',I,num2str(X),MaxFval,num2str (BestPop(I,:)));disp(str1);%figure(2);plot(t,p);%绘制变异值增大过程T2=clock;elapsed_time=T2-T1;if elapsed_time(6)<0elapsed_time(6)=elapsed_time(6)+60; elapsed_time(5)=elapsed_time(5)-1; endif elapsed_time(5)<0elapsed_time(5)=elapsed_time(5)+60; elapsed_time(4)=elapsed_time(4)-1; end %像这种程序当然不考虑运行上小时啦str2=sprintf('程序运行耗时%d 小时%d 分钟%.4f 秒',elapsed_time(4),elapsed_time(5),ela psed_time(6));disp(str2);helen14 编辑于2005-11-2 22:28helen14 编辑于2005-11-2 22:41回复一颗沙里看出一个世界一朵花里藏着一座天堂把无限放在你的手中永恒在一刹那里收藏英国诗人布莱克---<天真的预示> MATLAB 编程基础与典型应用北京:人民邮电出版社ISBN:978-7-115-17932-6/TPliuhd_jeremy金鱼精华贴4经验值392美味虾74注册日期2005-6-19最近登陆2012-8-11来自电气大本营状态2005-11-2 22:30只看该作者tT #9接上一个遗传算法程序%初始化种群%采用二进制Gray编码,其目的是为了克服二进制编码的Hamming悬崖缺点function[initpop]=InitPopGray(popsize,bit s)len=sum(bits);initpop=zeros(popsize,len);%The whole zero encoding individualfor i=2:popsize-1pop=round(rand(1,len));pop=mod(([0 pop]+[pop 0]),2);%i=1时,b(1)=a(1);i>1时,b(i)=mod(a(i-1)+a(i),2)%其中原二进制串:a(1)a(2)...a(n),Gray 串:b(1)b(2)...b(n)initpop(i,:)=pop(1:end-1);endinitpop(popsize,:)=ones(1,len);%The whole one encoding individualhelen14 编辑于2005-11-2 22:31回复一颗沙里看出一个世界一朵花里藏着一座天堂把无限放在你的手中永恒在一刹那里收藏英国诗人布莱克---<天真的预示> MATLAB 编程基础与典型应用北京:人民邮电出版社ISBN:978-7-115-17932-6/TPliuhd_jeremy金鱼精华贴4经验值392美味虾74注册日期2005-6-19最近登陆2012-8-11来自电气大本营状态2005-11-2 22:33只看该作者tT#10接遗传算法程序%解码function [fval] = b2f(bval,bounds,bits)% fval - 表征各变量的十进制数% bval - 表征各变量的二进制编码串% bounds - 各变量的取值范围% bits - 各变量的二进制编码长度scale=(bounds(:,2)-bounds(:,1))'./(2. ^bits-1); %The range of the variables numV=size(bounds,1);cs=[0 cumsum(bits)];for i=1:numVa=bval((cs(i)+1):cs(i+1));fval(i)=sum(2.^(size(a,2)-1:-1:0).*a) *scale(i)+bounds(i,1);endhelen14 编辑于2005-11-2 22:33回复一颗沙里看出一个世界一朵花里藏着一座天堂把无限放在你的手中永恒在一刹那里收藏英国诗人布莱克---<天真的预示> MATLAB 编程基础与典型应用北京:人民邮电出版社ISBN:978-7-115-17932-6/TPliuhd_jeremy金鱼精华贴4经验值392美味虾74注册日期2005-6-19最近登陆2012-8-11来自电气大本营状态2005-11-2 22:36只看该作者tT#11接遗传算法程序%选择操作%采用基于轮盘赌法的非线性排名选择%各个体成员按适应值从大到小分配选择概率:%P(i)=(q/1-(1-q)^n)*(1-q)^i, 其中P(0)>P(1)>...>P(n), sum(P(i))=1function[selectpop]=NonlinearRankSelect( FUN,pop,bounds,bits)global m nselectpop=zeros(m,n);fit=zeros(m,1);for i=1:mfit(i)=feval(FUN(1,:),(b2f(pop(i,:),boun ds,bits)));%以函数值为适应值做排名依据endselectprob=fit/sum(fit);%计算各个体相对适应度(0,1)q=max(selectprob);%选择最优的概率x=zeros(m,2);x(:,1)=[m:-1:1]';[y x(:,2)]=sort(selectprob);r=q/(1-(1-q)^m);%标准分布基值newfit(x(:,2))=r*(1-q).^(x(:,1)-1);%生成选择概率newfit=cumsum(newfit);%计算各选择概率之和rNums=sort(rand(m,1));fitIn=1;newIn=1;while newIn<=mif rNums(newIn)<newfit(fitIn)selectpop(newIn,:)=pop(fitIn,:);newIn=newIn+1;elsefitIn=fitIn+1;endend回复一颗沙里看出一个世界一朵花里藏着一座天堂把无限放在你的手中永恒在一刹那里收藏英国诗人布莱克---<天真的预示> MATLAB 编程基础与典型应用北京:人民邮电出版社ISBN:978-7-115-17932-6/TPliuhd_jeremy金鱼精华贴4经验值392美味虾74注册日期2005-6-19最近登陆2012-8-11来自电气大本营状态2005-11-2 22:38只看该作者tT#12接遗传算法程序%交叉操作function[NewPop]=CrossOver(OldPop,pCro ss,opts)%OldPop为父代种群,pcross为交叉概率global m n NewPopr=rand(1,m);y1=find(r<pCross);y2=find(r>=pCross);len=length(y1);if len>2&mod(len,2)==1%如果用来进行交叉的染色体的条数为奇数,将其调整为偶数y2(length(y2)+1)=y1(len);y1(len)=[];endif length(y1)>=2for i=0:2:length(y1)-2if opts==0[NewPop(y1(i+1),:),NewPop(y1(i+2),: )]=EqualCrossOver(OldPop(y1(i+1),:), OldPop(y1(i+2),:));else[NewPop(y1(i+1),:),NewPop(y1(i+2),: )]=MultiPointCross(OldPop(y1(i+1),:), OldPop(y1(i+2),:));endendendNewPop(y2,:)=OldPop(y2,:);%采用均匀交叉function[children1,children2]=EqualCross Over(parent1,parent2)global n children1 children2hidecode=round(rand(1,n));%随机生成掩码crossposition=find(hidecode==1); holdposition=find(hidecode==0); children1(crossposition)=parent1(cross position);%掩码为1,父1为子1提供基因children1(holdposition)=parent2(holdp osition);%掩码为0,父2为子1提供基因children2(crossposition)=parent2(cross position);%掩码为1,父2为子2提供基因children2(holdposition)=parent1(holdp osition);%掩码为0,父1为子2提供基因%采用多点交叉,交叉点数由变量数决定function[Children1,Children2]=MultiPointCross(Parent1,Parent2)global n Children1 Children2 VarNum Children1=Parent1;Children2=Parent2;Points=sort(unidrnd(n,1,2*VarNum)); for i=1:VarNumChildren1(Points(2*i-1):Points(2*i))=P arent2(Points(2*i-1):Points(2*i));Children2(Points(2*i-1):Points(2*i))=P arent1(Points(2*i-1):Points(2*i));end回复一颗沙里看出一个世界一朵花里藏着一座天堂把无限放在你的手中永恒在一刹那里收藏英国诗人布莱克---<天真的预示> MATLAB 编程基础与典型应用北京:人民邮电出版社ISBN:978-7-115-17932-6/TPliuhd_jeremy金鱼精华贴4经验值392美味虾74注册日期2005-6-19最近登陆2012-8-11来自电气大本营状态2005-11-2 22:40只看该作者tT#13接遗传算法程序%变异操作function[NewPop]=Mutation(OldPop,pMut ation,VarNum)global m n NewPopr=rand(1,m);position=find(r<=pMutation);len=length(position);if len>=1for i=1:lenk=unidrnd(n,1,VarNum); %设置变异点数,一般设置1点for j=1:length(k)ifOldPop(position(i),k(j))==1OldPop(position(i),k(j))=0;elseOldPop(position(i),k(j))=1;endendendendNewPop=OldPop;回复一颗沙里看出一个世界一朵花里藏着一座天堂把无限放在你的手中永恒在一刹那里收藏英国诗人布莱克---<天真的预示> MATLAB 编程基础与典型应用北京:人民邮电出版社ISBN:978-7-115-17932-6/TPliuhd_jeremy金鱼精华贴4经验值392美味虾74注册日期2005-6-19最近登陆2012-8-11来自电气大本营状态2005-11-2 22:42只看该作者tT#14接遗传算法程序%倒位操作function[NewPop]=Inversion(OldPop,pInv ersion)global m n NewPopNewPop=OldPop;r=rand(1,m);PopIn=find(r<=pInversion);len=length(PopIn);if len>=1for i=1:lend=sort(unidrnd(n,1,2));if d(1)~=1&d(2)~=nNewPop(PopIn(i),1:d(1)-1)=OldPop(Po pIn(i),1:d(1)-1);NewPop(PopIn(i),d(1):d(2))=OldPop(P opIn(i),d(2):-1:d(1));NewPop(PopIn(i),d(2)+1:n)=OldPop(P opIn(i),d(2)+1:n);endendendhelen14 编辑于2005-11-2 22:48回复一颗沙里看出一个世界一朵花里藏着一座天堂把无限放在你的手中永恒在一刹那里收藏英国诗人布莱克---<天真的预示> MATLAB 编程基础与典型应用北京:人民邮电出版社ISBN:978-7-115-17932-6/TPliuhd_jeremy金鱼精华贴4经验值392美味虾74注册日期2005-6-19最近登陆2012-8-11来自电气大本营状态2005-11-2 22:50只看该作者tT#15今天就发这么多,还真的有一点累啊!以后有时间再继续往上发!另外,发程序地时候总是有很多表情图标,要编辑好几次!真地挺麻烦地!helen14 编辑于2005-11-2 22:51回复一颗沙里看出一个世界一朵花里藏着一座天堂把无限放在你的手中永恒在一刹那里收藏英国诗人布莱克---<天真的预示> MATLAB 编程基础与典型应用北京:人民邮电出版社ISBN:978-7-115-17932-6/TPliuhd_jeremy金鱼精华贴4经验值392美味虾74注册日期2005-6-19最近登陆2012-8-11来自电气大本营状态2005-11-312:16只看该作者tT#16七径向基神经网络训练程序clear all;clc;%newrb 建立一个径向基函数神经网络p=0:0.1:1; %输入矢量t=[0 -1 0 1 1 0 -1 0 0 1 1 ];%目标矢量goal=0.01; %误差sp=1; %扩展常数mn=100;%神经元的最多个数df=1; %训练过程的显示频率[net,tr]=newrb(p,t,goal,sp,mn, df); %创建一个径向基函数网络% [net,tr]=train(net,p); %调用traingdm算法训练网络%对网络进行仿真,并绘制样本数据和网络输出图形A=sim(net,p);E=t-A;sse=sse(E);figure;plot(p,t,'r-+',p,A,'b-*'); legend('输入数据曲线','训练输出曲线');echo off说明:newrb函数本来在创建新的网络的时候就进行了训练!每次训练都增加一个神经元,都能最大程度得降低误差,如果未达到精度要求,那么继续增加神经元,程序终止条件是满足精度要求或者达到最大神经元的数目.关键的一个常数是spread(即散布常数的设置,扩展常数的设置).不能对创建的net调用train函数进行训练!训练结果显示:NEWRB, neurons = 0, SSE =5.0973NEWRB, neurons = 2, SSE =4.87139NEWRB, neurons = 3, SSE =3.61176NEWRB, neurons = 4, SSE =3.4875NEWRB, neurons = 5, SSE =0.534217NEWRB, neurons = 6, SSE =0.51785NEWRB, neurons = 7, SSE =0.434259NEWRB, neurons = 8, SSE =0.341518NEWRB, neurons = 9, SSE =0.341519NEWRB, neurons = 10, SSE =0.00257832helen14 编辑于2005-11-312:211455.GIF(106.13 KB)下载次数:361 最后编辑时间:1970-1-1 08:00回复一颗沙里看出一个世界一朵花里藏着一座天堂把无限放在你的手中永恒在一刹那里收藏英国诗人布莱克---<天真的预示> MATLAB编程基础与典型应用北京:人民邮电出版社ISBN:978-7-115-17932-6/TPCastleV金鱼经验值1313美味虾56注册日期2004-11-19最近登陆2010-8-19状态2005-11-3 14:54只看该作者tT#17我无意顶撞楼主,不过这样的程序我认为实在没有价值回复密柑金鱼精华贴1经验值822美味虾57注册日期2005-4-25最近登陆2011-4-14状态2005-11-3 16:25只看该作者tT#18 louzhu 牛啊matlab2011 如何添加工具箱2012-3-15 15:08提问者:mwm1123|浏览次数:1397次我来帮他解答回答共1条2012-3-15 16:25 wtpttcm|二级如果是Matlab安装光盘上的工具箱,重新执行安装程序,选中即可。