From b13b083b683d28365f4956bae1c6e3e7ac8fab1c Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Tue, 7 Jul 2020 17:48:54 +0200 Subject: Restore inverse punishSize --- .../viatrasolver/reasoner/ViatraReasoner.xtend | 13 ++++-- .../reasoner/ViatraReasonerConfiguration.xtend | 8 +++- .../reasoner/dse/PunishSizeObjective.xtend | 46 +++++++--------------- 3 files changed, 30 insertions(+), 37 deletions(-) (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf') diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend index b58033d7..fd871615 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend @@ -28,11 +28,13 @@ import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.LoggerSolutionFoundH import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.ModelGenerationCompositeObjective import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.NumericSolver import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.PartialModelAsLogicInterpretation +import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.PunishSizeObjective import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.ScopeObjective import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.SurelyViolatedObjectiveGlobalConstraint import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.UnfinishedMultiplicityObjective import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.ViatraReasonerSolutionSaver import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.WF2ObjectiveConverter +import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.ObjectiveKind import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.ThreeValuedCostElement import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.ThreeValuedCostObjective import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace @@ -43,7 +45,6 @@ import org.eclipse.viatra.dse.api.DesignSpaceExplorer import org.eclipse.viatra.dse.api.DesignSpaceExplorer.DseLoggingLevel import org.eclipse.viatra.dse.solutionstore.SolutionStore import org.eclipse.viatra.dse.statecode.IStateCoderFactory -import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.PunishSizeObjective class ViatraReasoner extends LogicReasoner { val PartialInterpretationInitialiser initialiser = new PartialInterpretationInitialiser() @@ -100,9 +101,13 @@ class ViatraReasoner extends LogicReasoner { viatraConfig ) dse.addObjective(compositeObjective) - if (viatraConfig.punishSize) { - val punishObjective = new PunishSizeObjective - punishObjective.level = compositeObjective.level + 1 + if (viatraConfig.punishSize != PunishSizeStrategy.NONE) { + val punishSizeStrategy = switch (viatraConfig.punishSize) { + case SMALLER_IS_BETTER: ObjectiveKind.LOWER_IS_BETTER + case LARGER_IS_BETTER: ObjectiveKind.HIGHER_IS_BETTER + default: throw new IllegalArgumentException("Unknown PunishSizeStrategy: " + viatraConfig.punishSize) + } + val punishObjective = new PunishSizeObjective(punishSizeStrategy, compositeObjective.level + 1) dse.addObjective(punishObjective) } diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasonerConfiguration.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasonerConfiguration.xtend index a2f6de22..0173124c 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasonerConfiguration.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasonerConfiguration.xtend @@ -26,6 +26,12 @@ enum StateCoderStrategy { DefinedByDiversity } +enum PunishSizeStrategy { + NONE, + SMALLER_IS_BETTER, + LARGER_IS_BETTER +} + class ViatraReasonerConfiguration extends LogicSolverConfiguration { // public var Iterable existingQueries public var nameNewElements = false @@ -57,7 +63,7 @@ class ViatraReasonerConfiguration extends LogicSolverConfiguration { public var runIntermediateNumericalConsistencyChecks = true - public var punishSize = false + public var punishSize = PunishSizeStrategy.NONE public var scopeWeight = 1 public var conaintmentWeight = 2 public var nonContainmentWeight = 1 diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/PunishSizeObjective.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/PunishSizeObjective.xtend index 8505661c..bad8e4d1 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/PunishSizeObjective.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/PunishSizeObjective.xtend @@ -2,28 +2,27 @@ package hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PrimitiveElement -import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.IThreeValuedObjective -import java.util.Comparator +import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.AbstractThreeValuedObjective +import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.ObjectiveKind +import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.ObjectiveThreshold import org.eclipse.viatra.dse.base.ThreadContext -import org.eclipse.viatra.dse.objectives.Comparators -import org.eclipse.xtend.lib.annotations.Accessors -class PunishSizeObjective implements IThreeValuedObjective { - @Accessors int level = 3 +class PunishSizeObjective extends AbstractThreeValuedObjective { + static val NAME = typeof(PunishSizeObjective).name + + new(ObjectiveKind kind, int level) { + super(NAME, kind, ObjectiveThreshold.NO_THRESHOLD, level) + } override createNew() { - this + new PunishSizeObjective(kind, level) } override init(ThreadContext context) { // Nothing to initialize. } - override getComparator() { - Comparators.LOWER_IS_BETTER - } - - override getFitness(ThreadContext threadContext) { + override getRawFitness(ThreadContext threadContext) { val model = threadContext.model if (model instanceof PartialInterpretation) { val size = model.newObjectCount @@ -34,11 +33,11 @@ class PunishSizeObjective implements IThreeValuedObjective { } } - override getBestPossibleFitness(ThreadContext threadContext) { - getFitness(threadContext) + override getLowestPossibleFitness(ThreadContext threadContext) { + getRawFitness(threadContext) } - override getWorstPossibleFitness(ThreadContext threadContext) { + override getHighestPossibleFitness(ThreadContext threadContext) { val model = threadContext.model if (model instanceof PartialInterpretation) { (model.newObjectCount + model.maxNewElements) as double @@ -50,21 +49,4 @@ class PunishSizeObjective implements IThreeValuedObjective { private def getNewObjectCount(PartialInterpretation interpretation) { interpretation.newElements.reject[it instanceof PrimitiveElement].size } - - override getName() { - typeof(PunishSizeObjective).name - } - - override isHardObjective() { - false - } - - override satisifiesHardObjective(Double fitness) { - true - } - - override setComparator(Comparator comparator) { - throw new UnsupportedOperationException("Model generation objective comparator cannot be set.") - } - } \ No newline at end of file -- cgit v1.2.3-54-g00ecf