Определение ограничений в Jenetics - PullRequest
0 голосов
/ 21 ноября 2018

Ранее я работал с MOEA Framework , который знает концепцию ограничений.То есть решение проблемы может иметь хорошую пригодность, но неосуществимо.Например, при работе с задачей о ранце определенная комбинация предметов может привести к высокой прибыли, но их вес превышает вместимость ранца.Соответствующая фитнес-функция будет включать строки типа:

// Set the fitness (=> profit) of the solution (=> knapsack).
solution.setObjective(0, profit)
// Set the constrain (=> 0.0 if OK, , otherwise the distance to the boundary).
solution.setConstraint(0, (weight <= capacity) ? 0.0 : weight - capacity)

Другим примером в случае многоцелевой проблемы с рюкзаком будет ограничение на то, что в рюкзаке нельзя использовать предметы, которые уже используются в другом рюкзаке.

Имеет ли Jenetics нечто подобное?Или как я могу кодировать ограничения как часть фитнес-функции (или где-то еще)?

Ответы [ 2 ]

0 голосов
/ 12 июля 2019

Начиная с Jenetic v5.0.0 , оба phenotypeValidator и genotypeValidator были удалены, но теперь можно определить Constraint (см. Также руководство пользователя , раздел 2.5):

Engine.builder(/* ... */)
        .constraint(Constraint.of(phenotype -> /* test validity */)
        .build();

Также можно реализовать Constraint repairметод для восстановления данных лиц.

Обратите внимание (см. этот ответ ):

Это [интерфейс Constraint] подразумевается как последнийлиния защиты, когда дело доходит до проверки достоверности личности.[…] Второй важный метод [помимо test] Constraint - это метод repair.Этот метод пытается исправить данного человека.Без определения этого метода создается только новый случайный фенотип.

0 голосов
/ 21 ноября 2018

Jenetics не поддерживает ограничения напрямую.Вы можете установить phenotypeValidator в Engine.Builder.Это приведет к отклонению Phenotypes и воссозданию недействительных лиц.Не совсем ограничение, но своего рода.Вторая возможность - вернуть минимальное значение пригодности для всех целей для таких значений.

...