上下文 我正在模擬行爲進化。爲此,我使用神經網絡來模擬行爲。實際上有成千上萬的這些神經網絡相互作用。在任何一代人的最後,最強烈的行爲都被抄襲到鄰居身上。當發生這種情況時,我需要爲更強大的神經網絡創建一個完全相同但獨立的版本;從而取代它。動態創建一個相同和獨立的神經網絡副本。 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