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

org.aiddl.common.scala.reasoning.resource.FlexibilityLossFunction.scala Maven / Gradle / Ivy

package org.aiddl.common.scala.reasoning.resource

import org.aiddl.core.scala.function.Function
import org.aiddl.core.scala.representation.Tuple
import org.aiddl.core.scala.representation._
import org.aiddl.common.scala.Common.NIL
import org.aiddl.common.scala.reasoning.temporal.Timepoint

import org.aiddl.core.scala.representation.conversion.given_Conversion_Term_Num
import scala.language.implicitConversions

class FlexibilityLossFunction extends Function {
  def apply( peak: CollectionTerm, dom: CollectionTerm ): Term = {
    def Est = Timepoint.Est(dom)_
    def Lst = Timepoint.Lst(dom)_
    def Eet = Timepoint.Eet(dom)_
    def Let = Timepoint.Let(dom)_

    var added: Set[Term] = Set.empty
    val mcss: Iterable[(Term, Term)] = peak.flatMap( a => {
      added = added + a
      peak.collect({ case b if (!added.contains(b)) => {
        added = added + b
        (a, b)
      }})})

    var pcMin = Num(1.1)
    var pcList: List[Term] = Nil

    def pc( i: Term, j: Term ): Term = {
      val dMin = Est(j) - Let(i)
      val dMax = Lst(j) - Eet(i)
      if (dMin == dMax) NIL else {
        val pc: Num =
          if (dMin < Num(0.0) && dMax < Num(0.0)) Num(1.0)
          else if (dMin == InfNeg() && dMax == InfPos()) Num(0.5)
          else {
            (dMax.min(Num(0.0)) - dMin.min(Num(0.0))) / (dMax - dMin)
          }
        pcList = pc :: pcList
        pcMin = pc.min(pcMin)
        Tuple(pc, i, j)
      }
    }

    val values = mcss.flatMap( _ match { case (i, j) => {
      List(pc(i, j), pc(j, i)).filter( _ != NIL ) }})

    val k = pcList.foldLeft(Num(0.0))( (c, pc) => c + (Num(1.0) / (Num(1.0) + pc - pcMin) ))
    Tuple(
      if ( k != Num(0.0) ) Num(1.0) / k.asNum else Num(1.0),
      ListTerm(values.toSeq)
    )
  }

  def apply( acs: Term ): Term = this(acs(0).asCol, acs(1).asCol)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy