我在C#中实现了一种进化算法,哪种方法有效,但我假设克隆没有。该算法维护一群对象树。每个对象(树)可以是克隆的结果(例如在“自然选择”之后),并且应该是由唯一对象组成的唯一对象。有没有一种简单的方法来确定“对象群体”是否包含唯一/不同的对象 - 换句话说,对象是否由多个树共享?我希望我的问题有道理。
感谢。
祝福,
基督教
PS:我通过序列化实现(我认为)深拷贝克隆,请参阅:
http://www.codeproject.com/KB/tips/SerializedObjectCloner.aspx
答案 0 :(得分:1)
验证两个对象是否是内存中相同对象的方法是使用Object.ReferenceEquals进行比较。这将检查“指针”是否相同。
答案 1 :(得分:0)
C#中的克隆默认为浅拷贝。您可能需要google for tutorials的关键字是“深度克隆”,以便创建不共享引用的对象图。
答案 2 :(得分:0)
如下所示:为每个类添加一个静态计数器,用于“主树类”的成员引用。增量在每个结构者中对抗它。确定树对象(或所有树对象)中应包含多少个子对象,并将其与计数器进行比较。
答案 3 :(得分:0)
好的,首先,让我看看我是否能帮助你:
RESULT是一个包含一些数据的对象树。
GENERATION是结果对象的集合。
你有一些'进化'方法可以将每个GENERATION移动到下一步。
如果你想检查一个RESULT是否与另一个相等,你应该在它上面实现IComparable
,并为每个成员做同样的事。
此外:
尝试摆脱那种克隆,并手动制作克隆 - 它会更快。速度对你来说至关重要,因为所有的启发式都归结为肌肉。
答案 4 :(得分:0)
如果你问的是“我如何检查两个对象变量是否引用相同的内存,你可以调用Object.ReferenceEquals