上下文 我正在模拟行为进化。为此,我使用神经网络来模拟行为。实际上有成千上万的这些神经网络相互作用。在任何一代人的最后,最强烈的行为都被抄袭到邻居身上。当发生这种情况时,我需要为更强大的神经网络创建一个完全相同但独立的版本;从而取代它。动态创建一个相同和独立的神经网络副本。 JAVA
的问题 我已经看过了深深的克隆,它的工作原理,但它是复制节点的引用,而不是创建一个新的相同的实例。困难来自系统结构。我看不出如何改善它。 速度也是一个因素。我需要这个每周运行数百万次迭代。
任何帮助将不胜感激。
系统结构
细胞
public class Cell_NN Extends Cell
{
private Network network;
//Methods
}
网络
public class Network implements Cloneable, Serializable
{
private ArrayList<ArrayList<Node>> net;
private ArrayList<Node> layer;
//Methods
}
节点
public class Node implements Cloneable, Serializable
{
private ArrayList<Node> nextNodes;
private ArrayList<Float> weights;
//Methods
}
深克隆(这是我从计算器扯掉某人)
public Network deepClone()
{
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(this);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
Network network = (Network) ois.readObject();
return (Network) ois.readObject();
} catch (IOException e) {
return null;
} catch (ClassNotFoundException e) {
return null;
}
}
我不能确定这是否是允许的,但这里是我的情况下,github上,你想了解更多的信息:Napier40124399。项目名为HonorsMain_v2并且是公共的。
看起来更适合CodeReview.SE。你真的遇到了你的代码问题,比如StackOverflowError? – glee8e
没有错误,一切运行顺利。它根本不符合要求。 – Hoijf
不好意思,因为那段深拷贝代码看起来不错,它也是apache commons-lang的[通用克隆工具]所使用的技术(https://github.com/apache/commons-lang/blob/主/ SRC /主/ JAVA /组织/阿帕奇/公地/ lang3/SerializationUtils.java#L77)。我认为在发布的代码中没有任何错误。也许你应该检查你软件的其他部分。 – glee8e