问题标签 [jenetics]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
158 浏览

java - Jenetics 约束似乎没有效果

我已经使用Jenetics实现了背包问题的变体,如下所示:

@ValueLombok的一部分,并生成一堆代码,如构造函数、getter 等。Problem该类为特定的背包问题定义了一些常量(来自https://people.sc.fsu.edu/~jburkardt/datasets/knapsack_01/的 P07背包_01.html):

尽管 Jenetics用户指南说(参见第 2.5 节):

一个给定的问题通常应该以某种方式编码,即进化不可能Engine创造出无效的个体(Genotypes)。

我想知道为什么引擎会不断创建重量超过背包最大容量的解决方案。所以尽管这些解决方案根据给定的无效ConstraintPhenotype#isValid()返回true

我可以通过将适应度函数更改为:

或者通过确保编解码器只能创建有效的解决方案:

Constraint但是,如果它没有效果,那么它的目的是什么?

0 投票
2 回答
125 浏览

java - 使用 Jenetics 创建基因型时的约束

我正在使用Jenetics试验多目标优化问题 (MOP) 。我创建的一个玩具问题是从给定集合中选择两个子集,最大化它们的总和,给定每个子集都有一个限制。但是我想确保这两个子集是互斥的。在创建两条染色体的基因型时如何设置此约束?

我用来解决玩具问题的套装是:

我的问题的签名是:

编解码器是:

我为第一个子集分配了 9 个限制,第二个子集分配了 4 个限制。

我期望两个具有互斥基因的染色体的初始种群,这样表型最终将产生没有从SET.

我目前得到的一个示例输出是:

但我希望两个人都有相互排斥的物品。Jenetics 如何做到这一点?

0 投票
1 回答
68 浏览

java - 通过交换染色体进行重组以产生新的基因型

Jenetics 文档指定重组通过组合两个(或多个)亲本染色体的一部分来创建一个新染色体。基于此,该库还提供了各种交叉技术的具体实现。是否有一个开箱即用的功能,我可以使用它来重组群体中的两个(或更多)基因型(即交换染色体),而不影响每个染色体的基因?

考虑一个示例,其中初始群体由 2 个基因型组成,每个基因型由 2 条染色体组成。我需要两个个体之间的交叉,这样只有染色体被交换,而基因完好无损。

示例说明

代码中的相同示例如下所示:

CustomWordCrossover该类扩展接口以在Alterer基因型之间随机交换染色体。

有没有更好的方法来实现这一目标?也许是内置库函数?到目前为止,我在文档中找不到任何内容。

0 投票
2 回答
67 浏览

genetic-algorithm - 遗传算法适应度和交叉选择

我正在尝试使用遗传算法为教室中的给定部分安排随机座位列表,以便该教室中的所有小组坐在一起。

这是我目前的尝试,我不清楚改进此算法的最佳方法,因为这是我 GA 学习的早期阶段。

我正在使用 Java 库 Jenetics,它非常适合我入门,这里是引擎。

编码看起来像这样

我的健身功能肯定可以提高,我没有使用任何库,所以这里的任何建议都会很棒,但看起来像这样。

基本上我所做的只是找到组中每个座位的 x 和 y 坐标,并计算每个座位与组中其他座位的距离,并将这些值相加。值越低越好,因此Optimize.MINIMUM在引擎中

请参阅下面的结果图像,您可以看到它非常好(尽管运行大约需要 3 分钟才能产生正确的结果)。

3次迭代的结果

0 投票
1 回答
42 浏览

java-stream - jenetics:在 stream() 之外设置 EvolutionStream 限制

在jenetics中有几种可能性来设置终止限制EvolutionStream,请参阅文档

这些限制通常直接应用于stream,例如

或者

或结合使用,请参见示例

在我的优化问题中,我想让用户决定分配给问题的限制。我不知道预先设置的限制。它可能是多个限制。因此,我必须在运行时分配限制类型。

我试图EvolutionStream通过

并在 上分配限制evolutionStream

结果是一个Stream,它不知道EvolutionStream具体的限制方法。因此,如果定义了多个限制,我将无法应用它。试图投

导致错误:

那么,有没有办法在流构建器之外正确应用多个限制?

0 投票
1 回答
62 浏览

fitness - jenetics: Fitness: 分配一个对象来确定适应度和复杂的适应度结果类型

我使用的IntegerChromosome是实际问题的编码。为了确定适合度,我必须从IntegerChromosome或更多IntegerGene值解码为优化问题的实际基本类型。因此,例如,IntegerGene值 0 表示具有值的类型实例ClassA1 表示具有值的类型实例,Class依此B类推。因此,01233210 将转换为 ABCDDCBA。只有后者我可以评价。我在运行时在类中获取此信息FitnessInput

因此我需要传递FitnessInput适应度函数的确定。看一个简单的例子,我发现在eval()例子中的方法中,适应度的确定是在静态方法中进行的。是否有一个概念和相关示例如何将运行时对象传递给适应度的确定,而不是在fitness()实现的类中覆盖静态变量?


第二个问题与适应度确定问题有关。我发现了简单数据类型用于确定适合度的Integer示例。Double虽然这当然是合理的,但我想将一个对象返回给用户以获得最佳表型,其中包含确定其适合度的所有中间结果。我想如果我的返回对象实现了这应该是可能的Comparable。例如,我如何利用该Function界面?

0 投票
1 回答
40 浏览

java - Jenetics 计算整个人群的健康状况

根据我的问题的性质,出于性能原因,我想同时计算人口中所有个人的健康状况。在jenetics中是否有这样做的好方法?

谢谢

0 投票
1 回答
166 浏览

java - Quarkus 和 Jenetics 的 ContextNotActiveException

第一次使用 Quarkus,这可能是一个菜鸟问题,但我不知道如何解决。我正在尝试设置一个应该运行遗传算法(由 Jenetics 制作)并返回结果的端点。这是端点定义:

端点要求执行以下服务类:

最后这是映射器类:

当我运行上面的代码时,我得到以下异常:

Error handling 0d80baf3-12da-49ec-b8d0-e48472c801c9-1, org.jboss.resteasy.spi.UnhandledException: java.util.concurrent.CancellationException: javax.enterprise.context.ContextNotActiveException

代码在标准 Java 应用程序中完美运行,但在 Web 服务中却没有。任何想法?


在这里您可以找到堆栈跟踪。

0 投票
2 回答
59 浏览

java - Jenetics:如何解释并得到染色体的结果?

我练习使用这个库,Jenetics.io。在他们的手册中,他们有一个例子,旅行推销员。该示例仅显示找到的最小路径,但不显示解决方案的点集或点顺序。如何获得解决方案的点集?

手册.. 第 129 页在此处输入链接描述

运行代码,结果:

我使用的代码:

}