我正在尝试开始使用Jenetics JAVA库进行遗传算法,而且我的GA有限背景中有一些我不理解的东西;
据我所知,GA生成了一组m元素阵列,其中每个数组都是一个可以评估的潜在解决方案,一旦评估,潜在的解决方案就会被排序,最好的选择是为了创建一个新的人口,等等.但我发现Jenetics中的解决方案(基因型)是一个数组列表,其中每个数组都是我理解的潜在解决方案,每个数组也可以有不同的长度,我不明白为什么要使用这个结构而不是基因载体.
参见手册第6页,第3.1.3节.
如果可能的话我想知道为什么会这样.我希望这个问题足够明确.
在科特林我可以做
sealed class Substance {
object Uranus : Substance()
object Mercury: Substance()
object Ammonia : Substance()
}
data class DangerousBox<T : Substance>(val item: T)
fun main() {
val uranus = DangerousBox<Substance.Uranus>(Substance.Uranus)
val mercury: DangerousBox<Substance.Mercury> = uranus
}
Run Code Online (Sandbox Code Playgroud)
现在我有不变的类型DangerousBox<Substance.Uranus>, DangerousBox<Substance.Mercury>等,所以上面的示例将无法编译。
如何在 Haskell 中做到这一点?
理想情况下我想要类型
uranus :: DangerousBox Uranus
uranus = DangerousBox Mercury
Run Code Online (Sandbox Code Playgroud)
这个样本也不能符合。
我尝试通过以下方式来实现:
module Sample.Types.Boxes
( Substance(..)
, dangerousBox
, VDangerousBox {- no Con-}
) where
data Substance
= Uranus
| Mercury
| Ammonia
deriving (Show)
data …Run Code Online (Sandbox Code Playgroud)