From 3f9b1c92cc35fa4ed9672a2b8601f4c22af24921 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Sun, 7 Apr 2019 13:46:36 +0200 Subject: Infrastructure for objective functions --- .../dse/ModelGenerationCompositeObjective.xtend | 77 +++++++++++----------- 1 file changed, 40 insertions(+), 37 deletions(-) (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/ModelGenerationCompositeObjective.xtend') diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/ModelGenerationCompositeObjective.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/ModelGenerationCompositeObjective.xtend index 2489c751..af6d1bbd 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/ModelGenerationCompositeObjective.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/ModelGenerationCompositeObjective.xtend @@ -1,11 +1,12 @@ package hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse +import com.google.common.collect.ImmutableList import java.util.Comparator import java.util.List import org.eclipse.viatra.dse.base.ThreadContext import org.eclipse.viatra.dse.objectives.Comparators import org.eclipse.viatra.dse.objectives.IObjective -import org.eclipse.viatra.dse.objectives.impl.BaseObjective +import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor //class ViatraReasonerNumbers { // public static val scopePriority = 2 @@ -22,64 +23,66 @@ import org.eclipse.viatra.dse.objectives.impl.BaseObjective // public static val compositePriority = 2 //} -class ModelGenerationCompositeObjective implements IObjective{ - val ScopeObjective scopeObjective - val List unfinishedMultiplicityObjectives - val UnfinishedWFObjective unfinishedWFObjective - - public new( - ScopeObjective scopeObjective, - List unfinishedMultiplicityObjectives, - UnfinishedWFObjective unfinishedWFObjective) - { - this.scopeObjective = scopeObjective - this.unfinishedMultiplicityObjectives = unfinishedMultiplicityObjectives - this.unfinishedWFObjective = unfinishedWFObjective - } - +@FinalFieldsConstructor +class ModelGenerationCompositeObjective implements IThreeValuedObjective { + val IObjective scopeObjective + val List unfinishedMultiplicityObjectives + val IObjective unfinishedWFObjective + override init(ThreadContext context) { this.scopeObjective.init(context) this.unfinishedMultiplicityObjectives.forEach[it.init(context)] this.unfinishedWFObjective.init(context) } - + override createNew() { return new ModelGenerationCompositeObjective( - this.scopeObjective, this.unfinishedMultiplicityObjectives, this.unfinishedWFObjective) + scopeObjective.createNew, + ImmutableList.copyOf(unfinishedMultiplicityObjectives.map[createNew]), + unfinishedWFObjective.createNew + ) } - + override getComparator() { Comparators.LOWER_IS_BETTER } + override getFitness(ThreadContext context) { var sum = 0.0 val scopeFitnes = scopeObjective.getFitness(context) - //val unfinishedMultiplicitiesFitneses = unfinishedMultiplicityObjectives.map[x|x.getFitness(context)] + // val unfinishedMultiplicitiesFitneses = unfinishedMultiplicityObjectives.map[x|x.getFitness(context)] val unfinishedWFsFitness = unfinishedWFObjective.getFitness(context) - - sum+=scopeFitnes + + sum += scopeFitnes var multiplicity = 0.0 - for(multiplicityObjective : unfinishedMultiplicityObjectives) { - multiplicity+=multiplicityObjective.getFitness(context)//*0.5 + for (multiplicityObjective : unfinishedMultiplicityObjectives) { + multiplicity += multiplicityObjective.getFitness(context) // *0.5 } - sum+=multiplicity - sum += unfinishedWFsFitness//*0.5 - - //println('''Sum=«sum»|Scope=«scopeFitnes»|Multiplicity=«multiplicity»|WFs=«unfinishedWFsFitness»''') - + sum += multiplicity + sum += unfinishedWFsFitness // *0.5 + // println('''Sum=«sum»|Scope=«scopeFitnes»|Multiplicity=«multiplicity»|WFs=«unfinishedWFsFitness»''') return sum } - override getLevel() { 2 } - override getName() { "CompositeUnfinishednessObjective"} + override getWorstPossibleFitness(ThreadContext threadContext) { + Double.POSITIVE_INFINITY + } + override getBestPossibleFitness(ThreadContext threadContext) { + 0.0 + } + + override getLevel() { 2 } + + override getName() { "CompositeUnfinishednessObjective" } + override isHardObjective() { true } + override satisifiesHardObjective(Double fitness) { fitness <= 0.001 } - - + override setComparator(Comparator comparator) { - throw new UnsupportedOperationException("TODO: auto-generated method stub") + throw new UnsupportedOperationException("Model generation objective comparator cannot be set.") } + override setLevel(int level) { - throw new UnsupportedOperationException("TODO: auto-generated method stub") + throw new UnsupportedOperationException("Model generation objective level cannot be set.") } - -} \ No newline at end of file +} -- cgit v1.2.3-54-g00ecf