All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.aiddl.common.scala.reasoning.constraint.ConvertConstraintsToTables.scala Maven / Gradle / Ivy

Go to download

Provides common types and algorithm implementations for the fast prototyping integrative AI systems with the AIDDL framework.

The newest version!
package org.aiddl.common.scala.reasoning.constraint

import org.aiddl.common.scala.reasoning.constraint.ConstraintTerm.{Constraints, Domains, Variables}
import org.aiddl.common.scala.reasoning.constraint.{Constraint, ConstraintSatisfactionProblem, CspSolver}
import org.aiddl.core.scala.function.Function
import org.aiddl.core.scala.representation.{KeyVal, ListTerm, SetTerm, Substitution, Term, Tuple, Var}
import org.aiddl.core.scala.util.ComboIterator
import org.aiddl.core.scala.util.logger.Logger

import java.util.logging.Level


class ConvertConstraintsToTables {
  private var solver = new CspSolver
  def apply(csp: ConstraintSatisfactionProblem): ConstraintSatisfactionProblem = {
    val domains = csp.domains
    val tables: Set[Constraint] = csp.constraints.map( constraint => {
      val scope = constraint.scope
      val subCsp =
        ConstraintSatisfactionProblem(
          scope.filter(_.isInstanceOf[Var]),
          domains.filter( (x, d) => scope.contains(x) ),
          Set(constraint))
      solver = new CspSolver
      solver.init(subCsp)
      val validArgsTable: Set[Term] = solver.map(valid => {
        val sub = Substitution.from(ListTerm(valid.toList))
        (scope \ sub).asTup
      }).toSet

      Constraint(Tuple(scope, SetTerm(validArgsTable)))
    })

    ConstraintSatisfactionProblem(
      csp.variables,
      csp.domains,
      tables
    )
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy