java最佳适应算法代码,最佳适应算法最坏适应算法
有目标函数,怎么用sgd算法优化
pre t="code" l="java"function main()
10年的乐清网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。网络营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整乐清建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联建站从事“乐清网站设计”,“乐清网站推广”以来,每个客户项目都认真落实执行。
clc;clear all;close all;
tic; %程序运行计时
E0=0.001; %允许误差
MaxNum=100; %粒子最大迭代次数
narvs=1; %目标函数的自变量个数
particlesize=30; %粒子群规模
c1=2; %每个粒子的个体学习因子,也称为加速常数
c2=2; %每个粒子的社会学习因子,也称为加速常数
w=0.6; %惯性因子
vmax=0.8; %粒子的最大飞翔速度
x=-5+10*rand(particlesize,narvs); %粒子所在的位置
v=2*rand(particlesize,narvs); %粒子的飞翔速度
%用inline定义适应度函数以便将子函数文件与主程序文件放在一起,
%目标函数是:y=1+(2.1*(1-x+2*x.^2).*exp(-x.^2/2))
%inline命令定义适应度函数如下:
fitness=inline('1/(1+(2.1*(1-x+2*x.^2).*exp(-x.^2/2)))','x');
%inline定义的适应度函数会使程序运行速度大大降低
for i=1:particlesize
for j=1:narvs
f(i)=fitness(x(i,j));
end
end
personalbest_x=x;
personalbest_faval=f;
[globalbest_faval i]=min(personalbest_faval);
globalbest_x=personalbest_x(i,:);
k=1;
while k=MaxNum
for i=1:particlesize
for j=1:narvs
f(i)=fitness(x(i,j));
end
if f(i)personalbest_faval(i) %判断当前位置是否是历史上最佳位置
personalbest_faval(i)=f(i);
personalbest_x(i,:)=x(i,:);
end
end
[globalbest_faval i]=min(personalbest_faval);
globalbest_x=personalbest_x(i,:);
for i=1:particlesize %更新粒子群里每个个体的最新位置
v(i,:)=w*v(i,:)+c1*rand*(personalbest_x(i,:)-x(i,:))
+c2*rand*(globalbest_x-x(i,:));
for j=1:narvs %判断粒子的飞翔速度是否超过了最大飞翔速度
if v(i,j)vmax;
v(i,j)=vmax;
elseif v(i,j)-vmax;
v(i,j)=-vmax;
end
end
x(i,:)=x(i,:)+v(i,:);
end
if abs(globalbest_faval)E0,break,end
k=k+1;
end
Value1=1/globalbest_faval-1; Value1=num2str(Value1);
% strcat指令可以实现字符的组合输出
disp(strcat('the maximum value','=',Value1));
%输出最大值所在的横坐标位置
Value2=globalbest_x; Value2=num2str(Value2);
disp(strcat('the corresponding coordinate','=',Value2));
x=-5:0.01:5;
y=2.1*(1-x+2*x.^2).*exp(-x.^2/2);
plot(x,y,'m-','linewidth',3);
hold on;
plot(globalbest_x,1/globalbest_faval-1,'kp','linewidth',4);
legend('目标函数','搜索到的最大值');xlabel('x');ylabel('y');grid on;toc;
遗传算法求最短路径
#includestdio.h
#includeiostream
#includestring.h
#includemalloc.h
#includestdlib.h
#includestring
using namespace std;
#define OVERFLOW -2
#define OK 1
#define ERROR 0
#define INFINITY 200//最大值
#define MAX_VERTEX_NUM 20//最大顶点个数
typedef char VertexType;//定义为char类型
//以下是全局变量,用于保存弗洛伊德算法的路径和长度
int D[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//记录最短路径长度
int P[MAX_VERTEX_NUM][MAX_VERTEX_NUM][MAX_VERTEX_NUM];//记录最短路径标记
//以下是全局变量,用于保存迪杰斯特拉算法的路径和长度
int Distance[MAX_VERTEX_NUM];
VertexType former[MAX_VERTEX_NUM];//终点的前一个顶点
bool final[MAX_VERTEX_NUM];//记录顶点是否在V-S中
typedef struct ArcCell
{
int adj; //顶点关系类型
int weight; //该弧相关信息的指针,在此记录为权值
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct
{
VertexType vexs[MAX_VERTEX_NUM]; //顶点向量
AdjMatrix arcs; //邻接矩阵
int vexnum; //顶点数
int arcnum; //弧数
}MGraph;
void InitialMGraph(MGraph G)//初始化
{
G.arcnum=G.vexnum=0; //初始化边数跟顶点数都为零
for(int i=0;iMAX_VERTEX_NUM;i++)
for(int j=0;jMAX_VERTEX_NUM;j++)
{
if(i==j)
G.arcs[i][j].weight=0;
else
G.arcs[i][j].weight=INFINITY; //初始化为200,以200认为是无穷大
}
}
void InsertVex(MGraph G,VertexType v)//插入顶点
{
if(G.vexnum=MAX_VERTEX_NUM)
G.vexs[G.vexnum++]=v;
}
void InsertArc(MGraph G,VertexType v1,VertexType v2)//插入边
{
int m,n;
G.arcnum++;
for(int k=0;kG.vexnum;k++)
{
if(G.vexs[k]==v1)
m=k;
if(G.vexs[k]==v2)
n=k;
}
//插入
ArcCell A;
cout"请输入权值:";
cinA.weight;
G.arcs[m][n].weight=A.weight;
}
//迪杰斯特拉最短路径,假设始点就存储在数组中的第一个
void ShortestPath_DIJ(MGraph G,int v0)
{
//初始化距离
for(int v=0;vG.vexnum;++v)
{
final[v]=false;
Distance[v]=G.arcs[v0][v].weight;
if(Distance[v]INFINITYDistance[v]!=0)
{
former[v]=G.vexs[v0];
}
else
former[v]='#';
}
final[v0]=true;
former[v0]=G.vexs[v0];
for(int i=1;iG.vexnum;++i)//剩余的G.vexnum-1个顶点
{
int w;
int min=INFINITY;
int v=-1;
for(w=0;wG.vexnum;++w)
{
if(!final[w]Distance[w]min)
{
v=w;
min=Distance[w];
}
}
if(v!=-1)
{
final[v]=true;//将离顶点V0最近的顶点v加入S集合中
for(w=0;wG.vexnum;++w)//更新当前的最短路径及距离
{
if(!final[w](min+G.arcs[v][w].weightDistance[w])G.arcs[v][w].weightINFINITY)
{
Distance[w]=min+G.arcs[v][w].weight;
former[w]=G.vexs[v];
}
}
}
}
}
//输出迪杰斯特拉中的最短路径
void output_ShortestPath_DIJ(MGraph G,int v0)
{
int i;
for(i=1;iG.vexnum;i++)
{
coutG.vexs[v0]"-"G.vexs[i]":";
if(Distance[i]!=INFINITY)
{
cout"最短路径长度为:"Distance[i]" 最短路径的前一个顶点为:"former[i];
coutendl;
}
else
cout"此两顶点之间不存在路径"endl;
}
}
//弗洛伊德最短路径
void shortestPath_FLOYD(MGraph G)
{
for(int v=0;vG.vexnum;++v)
{
for(int w=0;wG.vexnum;++w)
{
D[v][w]=G.arcs[v][w].weight;
for (int k=0;k G.vexnum;k++)
P[v][w][k]=-1;
if(D[v][w]INFINITY) //从v到w有直接路径
P[v][w][v]=w;
}
}
for(int k=0;kG.vexnum;++k)
{
for(int v=0;vG.vexnum;v++)
for(int w=0;wG.vexnum;++w)
if(D[v][w]D[v][k]+D[k][w])
{
D[v][w]=D[v][k]+D[k][w];
for(int i=0;iG.vexnum;i++)
{
if(P[v][k][i]!=-1)//原来存了顶点
P[v][w][i]=P[v][k][i];
else
P[v][w][i]=P[k][w][i];
}
}
}
}
//输出弗洛伊德中的最短路径
void output_shortestPath_FLOYD(MGraph G)
{
for(int i=0;iG.vexnum;++i)
{
for(int j=0;jG.vexnum;++j)
{
if(i!=j)//自己不能到达自己
{
coutG.vexs[i]"-"G.vexs[j]":";
if(D[i][j]==INFINITY)
{
cout"此两顶点之间不存在路径"endl;
}
else
{
cout"最短路径长度为:"" "D[i][j]" ";
cout"最短路径为:";
coutG.vexs[i];
for(int k=i;k!=-1;k=P[i][j][k])
{
if(k!=i)
coutG.vexs[k];
}
coutendl;
}
}
}
}
}
int main()
{
int num1;//顶点个数
int num2;//弧个数
cout"请输入顶点个数:";
cinnum1;
cout"请输入弧个数:";
cinnum2;
VertexType v;
MGraph G;
InitialMGraph(G);
cout"请输入顶点的信息:"endl;
for(int i=0;inum1;++i)
{
cinv;;
InsertVex(G,v);
}
VertexType v1,v2;
for(int j=0;jnum2;++j)
{
cout"请输入两个结点数据来表示的边:";
cinv1v2;
InsertArc(G,v1,v2);
}
ShortestPath_DIJ(G,0);
cout"迪杰斯特拉中的最短路径如下:"endl;
output_ShortestPath_DIJ(G,0);
coutendlendl;
shortestPath_FLOYD(G);
cout"弗洛伊德中的最短路径如下:"endl;
output_shortestPath_FLOYD(G);
return 0;
}
Java编程的特点是什么呢
Java编程的特点是什么呢?
Java由美国SUN公司(被oracle公司收购)发明于1995年,是目前业界应用最广泛、使用人数最多的语言,连续多年排名世界第一,可以称之为“计算机语言界的英语”。
那么Java这么高的评价它的特点有哪些,下面我来为题主解答:
一、跨平台/可移植性
这是Java的核心优势。Java在设计时就很注重移植和跨平台性。比如:Java的int永远都是32位。不像C++可能是16,32,可能是根据编译器厂商规定的变化。这样的话程序的移植就会非常麻烦。
Java首先利用文本编辑器编写 Java源程序,源文件的后缀名为.java;再利用编译器(javac)将源程序编译成字节码文件,字节码文件的后缀名为.class; 最后利用虚拟机(解释器,java)解释执行。如下图所示:
二、安全性
Java适合于网络/分布式环境,为了达到这个目标,在安全性方面投入了很大的精力,使Java可以很容易构建防病毒,防篡改的系统。比如Java取消了强大但又危险的指针。由于指针可进行移动运算,指针可随便指向一个内存区域,而不管这个区域是否可用,这样做是危险的。
三、面向对象
面向对象是一种程序设计技术,非常适合大型软件的设计和开发。由于C++为了照顾大量C语言使用者而兼容了C,使得自身仅仅成为了带类的C语言,多少影响了其面向对象的彻底性!Java则是完全的面向对象语言。
四、简单性
Java就是C++语法的简化版,我们也可以将Java称之为“C++-”。跟我念“C加加减”,指的就是将C++的一些内容去掉;比如:头文件,指针运算,结构,联合,操作符重载,虚基类等等。同时,由于语法基于C语言,因此学习起来完全不费力。
五、高性能
Java最初发展阶段,总是被人诟病“性能低”;客观上,高级语言运行效率总是低于低级语言的,这个无法避免。Java语言本身发展中通过虚拟机的优化提升了几十倍运行效率。比如,通过JIT(JUST IN TIME)即时编译技术提高运行效率。 将一些“热点”字节码编译成本地机器码,并将结果缓存起来,在需要的时候重新调用。这样的话,使Java程序的执行效率大大提高,某些代码甚至接近C++的效率。
因此,Java低性能的短腿,已经被完全解决了。业界发展上,我们也看到很多C++应用转到Java开发,很多C++程序员转型为Java程序员。
六、分布式
Java是为Internet的分布式环境设计的,因为它能够处理TCP/IP协议。事实上,通过URL访问一个网络资源和访问本地文件是一样简单的。Java还支持远程方法调用(RMI,Remote Method Invocation),使程序能够通过网络调用方法。
七、多线程
多线程的使用可以带来更好的交互响应和实时行为。 Java多线程的简单性是Java成为主流服务器端开发语言的主要原因之一。
八、健壮性
Java是一种健壮的语言,吸收了C/C++ 语言的优点,但去掉了其影响程序健壮性的部分(如:指针、内存的申请与释放等)。Java程序不可能造成计算机崩溃。即使Java程序也可能有错误。如果出现某种出乎意料之事,程序也不会崩溃,而是把该异常抛出,再通过异常处理机制加以处理。
以上几种特性你了解到啦吗? 记得给个赞!
去哪儿网java开发面试经验牛客
以下是某位求职者面经,仅供参考:
一面:
1.自我介绍
2.直接上手红黑树和平衡二叉树区别
3.红黑树的旋转
2node节点插入和3node节点插入时候旋转的情况 简述伪代码
4.问项目情况。大概半小时 5.concurrenthashmap
结构分析。 删除和获取操作过程描述。就是segment. Entry.
除了value 为volatile 其余都是final.
删除和获取操作等等。例如:删除操作是将entry要删除的节点的前半部分链表进行复制,并指向当前删除节点的后面节点。(因为next是final的,不可以进行修改,只有entry的表头可以修改)
不详述了。
6.索引的优缺点 什么时候索引不起作用? 在什么地方可以使用索引?
7.jvm
多态原理。invokestatic invokeinterface
等指令。常量池中的符号引用 找到直接引用。在堆中找到实例对象,获取到偏移量,由偏移量在方法表中指出调用的具体方法。接口是在方法表中进行扫描)等等扯了半天
8.os: 页面调度算法 几种 分别说一下 LRU FIFO 最佳适应算法
9.内存管理: 固定分区 动态分区 段 页 都讲讲 (哈哈)
10.自己实现一下LRU算法
8.怎么学习。看过什么书
二面:
1.自我介绍
2.项目中与app移动端 的json格式设计
3.hashmap的缺点 具体提现在哪里?
4.Collections.sort()
的原理---本质上调用的是Arrays.sort() 内部是 使用的归并排序 接着写了一下归并(辅助数组的归并,和手摇算法的归并)
5.一个字符串数组,现给定一个string去进行找出对应的数组中字符串的下标 (可以有容错,但两字符串长度必须一致,容错为2)
例如:
["hello","hj","abc"]
key=“hellg" 返回下角标0
6.jvm参数调优 jvm堆的大小调优
MaxTureningShelod newratio -xxs -xxm -persize
7.图的 prime
算法
kruskal
算法
dijkstra算法 解决什么问题? 分别写一下
伪代码
8.设计模式: 单例模式(懒汉饿汉) 工厂方法模式 观察者模式 责任链模式
9.项目 又问了一些
10.平时怎么学习?
三面:
1.自我介绍
2.自己优缺点
3.目前有几个offer
4.工作地点要求
5.在校实验室做项目,你认为最大的收获是什么
6.评价一下自己的大学生活
7.讲了一下福利 之类的
现场书面offer没了,所以只好等等邮寄,不过还好给了一个布偶纪念品
分享文章:java最佳适应算法代码,最佳适应算法最坏适应算法
文章分享:http://scyanting.com/article/hcshoi.html