模拟退火算法代码java,模拟退火算法函数

matlab 模拟退火算法求解TSP问题源代码

我这有飞机巡航的代码,本质上和旅行商问题一样,代码如下(非原创):

邵原ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!

function mySim()

disp('模拟退火求巡航路径');

data=xlsread('飞机巡航数据.xlsx','sheet1','C4:J28');

x=data(:,1:2:8);x=x(:);

y=data(:,2:2:8);y=y(:);

si=[x y]; d1=[70,40]; 

si=[d1;si;d1]; 

sj=si;

sj=sj*pi/180;    %经纬度化为弧度制

d=zeros(102); %距离矩阵d

for i=1:101

for j=i+1:102

temp=cos(sj(i,1)-sj(j,1))*cos(sj(i,2))*cos(sj(j,2))+sin(sj(i,2))*sin(sj(j,2));

d(i,j)=6370*acos(temp);

end

end

d=d+d';     %生成距离矩阵

S0=[];      %用于存放最优路径

Sum=inf;    %用于存放最优解

rand('state',sum(clock));   %设随机种子

for j=1:1000

S=[1 1+randperm(100),102];    %randperm(n)用于随机生成1到n的一个排列

temp=0;

for i=1:101

temp=temp+d(S(i),S(i+1));

end

if tempSum

S0=S;Sum=temp;

end

end

e=0.1^30;L=20000;at=0.999;T=1;

%退火过程

for k=1:L

%产生新解

c=2+floor(100*rand(1,2));   %floor向下取整,rand(m,n)生成m*n阶(0,1)随机矩阵

c=sort(c);                  %顺序排列

c1=c(1);c2=c(2);

%计算代价函数值

df=d(S0(c1-1),S0(c2))+d(S0(c1),S0(c2+1))-d(S0(c1-1),S0(c1))-d(S0(c2),S0(c2+1));

%接受准则

if df0

S0=[S0(1:c1-1),S0(c2:-1:c1),S0(c2+1:102)];

Sum=Sum+df;

elseif exp(-df/T)rand(1)

S0=[S0(1:c1-1),S0(c2:-1:c1),S0(c2+1:102)];

Sum=Sum+df;

end

T=T*at;

if Te

break;

end

end

% 输出巡航路径及路径长度

S0,Sum

%巡航时间

v=xlsread('飞机巡航数据.xlsx','sheet1','A2');

time=Sum/v(1,1)

%画出路径图

r=size(sj,1);

for i=1:r-1;

plot([si(S0(i),1) si(S0(i+1),1)],[si(S0(i),2) si(S0(i+1),2)],'*');

line([si(S0(i),1) si(S0(i+1),1)],[si(S0(i),2) si(S0(i+1),2)]);

hold on

end

matlab 模拟退火算法代码

你的,和】是中文格式的,改成半角的就好了。

,和]就对了。

java方法重载声明六个名为purchase的方法

模拟退火算法

Java基础06-方法的定义、声明、使用、重载

1.方法

方法是Java中一个明名的代码块,如同在数学中用到的函数,其他语言常常直接称为函数。

方法 通常是为了完成某一个特定功能,把程序中特定的代码组合到一起而构成的,其主要好处体现在两个方面:

一个是重用,另一个是使程序结构更加清晰。

方法的声明语法如下:

[修饰符] 返回值类型 方法名(形参列表){

方法体;

}

在Java 中,修饰符为访问者的权限大小,public 、protected、default、private、权限范围不同。

返回值类型 为数据类型 也就是说 你让方法完成了某项功能要不要返回一个结果,或者说你让程序做事

要不要程序给你个结果,所以返回值类型可以写成void即不需要返回什么,

返回值类型可以是基本数据类型也可以是引用类型

如果方法有返回值,那么方法体中必须写上“return 返回值;”,返回值的类型必须和方法上规定的返回值类型一致,

方法名可以重复和但不能使用关键字,方法中的形参其实就是你想让方法完成功能,给方法传输参数,形参是传入参数的类型

的一种表达,就好比你要让方法算两个人年龄的综合,你的传入两个int类型的参数,不然数据无法计算

例如:

public int all(int age1,int age2){

return age1+age2;

}

方法返回的是两个数的和。

无参数方法很简单:

注意:静态方法调用需要加上静态修饰符static

例如:

图中c=function();

说明function()本身就是一个值;

所以可以省略一定的步骤:

直接System.out.print(function());

输出的结果照样是:15

注意:方法有参数不一定有返回值,有返回值不一定有参数,并且方法执行遇到return就结束了,不会执行下面代码,并且return下面写的代码会报错。

例如:

return 0;

int a=0;

语法错误,编译不通过

2.方法的使用。

(1).注意方法的修饰符,决定了方法的使用范围,

(2).方法的调用:方法也可以自己调用自己,(递归)。

(3).方法如果没有返回值也可以return;只不过return后面不加参数

谁能给我举一个模拟退火算法MATLAB源代码的简单例子

clear

clc

a = 0.95

k = [5;10;13;4;3;11;13;10;8;16;7;4];

k = -k; % 模拟退火算法是求解最小值,故取负数

d = [2;5;18;3;2;5;10;4;11;7;14;6];

restriction = 46;

num = 12;

sol_new = ones(1,num); % 生成初始解

E_current = inf;E_best = inf;

% E_current是当前解对应的目标函数值(即背包中物品总价值);

% E_new是新解的目标函数值;

% E_best是最优解的

sol_current = sol_new; sol_best = sol_new;

t0=97; tf=3; t=t0;

p=1;

while t=tf

for r=1:100

%产生随机扰动

tmp=ceil(rand.*num);

sol_new(1,tmp)=~sol_new(1,tmp);

%检查是否满足约束

while 1

q=(sol_new*d = restriction);

if ~q

p=~p; %实现交错着逆转头尾的第一个1

tmp=find(sol_new==1);

if p

sol_new(1,tmp)=0;

else

sol_new(1,tmp(end))=0;

end

else

break

end

end

% 计算背包中的物品价值

E_new=sol_new*k;

if E_newE_current

E_current=E_new;

sol_current=sol_new;

if E_newE_best

% 把冷却过程中最好的解保存下来

E_best=E_new;

sol_best=sol_new;

end

else

if randexp(-(E_new-E_current)./t)

E_current=E_new;

sol_current=sol_new;

else

sol_new=sol_current;

end

end

end

t=t.*a;

end

disp('最优解为:')

sol_best

disp('物品总价值等于:')

val=-E_best;

disp(val)

disp('背包中物品重量是:')

disp(sol_best * d)

我想问一下 遗传算法与模拟退火算法相结合的排课系统实现代码

说实话找完整的代码还是比较难的,因为一般都会保密,分享出来的很少。

不过可以到pudn程序员联合开发网上去找找。

链接: 


文章标题:模拟退火算法代码java,模拟退火算法函数
文章网址:http://cdiso.cn/article/phcdhe.html

其他资讯