Package javaff.planning

Source Code of javaff.planning.STRIPSState

/************************************************************************
* Strathclyde Planning Group,
* Department of Computer and Information Sciences,
* University of Strathclyde, Glasgow, UK
* http://planning.cis.strath.ac.uk/
*
* Copyright 2007, Keith Halsey
* Copyright 2008, Andrew Coles and Amanda Smith
*
* (Questions/bug reports now to be sent to Andrew Coles)
*
* This file is part of JavaFF.
*
* JavaFF is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* JavaFF is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with JavaFF.  If not, see <http://www.gnu.org/licenses/>.
*
************************************************************************/

package javaff.planning;

import javaff.data.Action;
import javaff.data.TotalOrderPlan;
import javaff.data.GroundCondition;
import javaff.data.strips.Proposition;
import javaff.data.Plan;
import javaff.data.strips.STRIPSInstantAction;
import java.math.BigDecimal;
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;

public class STRIPSState extends State implements Cloneable
{
  public Set facts;
  public Set actions;

  protected TotalOrderPlan plan = new TotalOrderPlan();

  protected RelaxedPlanningGraph RPG;
  protected boolean RPCalculated = false;
  protected BigDecimal HValue = null;
  public TotalOrderPlan RelaxedPlan = null;
  public Set helpfulActions = null;

  protected STRIPSState()
  {

  }

  public STRIPSState(Set a, Set f, GroundCondition g)
  {
    facts = f;
    goal = g;
    actions = a;
//    filter = NullFilter.getInstance();
  }

  protected STRIPSState(Set a, Set f, GroundCondition g, TotalOrderPlan p)
  {
    this(a,f,g);
    plan = p;
  }

  public Object clone()
  {
    Set nf = (Set) ((HashSet) facts).clone();
    TotalOrderPlan p = (TotalOrderPlan) plan.clone();
    STRIPSState SS = new STRIPSState(actions, nf, goal, p);
    SS.setRPG(RPG);
//    SS.setFilter(filter);
    return SS;
  }

  public void setRPG(RelaxedPlanningGraph rpg)
  {
    RPG = rpg;
  }

  public RelaxedPlanningGraph getRPG()
  {
    return RPG;
  }

//  public Set getNextStates()     // get all the next possible states reachable from this state
//  {
//    return getNextStates(filter.getActions(this));
//  }

  public State apply(Action a)
  {
    STRIPSState s = (STRIPSState) super.apply(a);
    s.plan.addAction(a);
    return s;
  }

  public void addProposition(Proposition p)
  {
    facts.add(p);
  }

  public void removeProposition(Proposition p)
  {
    facts.remove(p);
  }

  public boolean isTrue(Proposition p)
  {
    return facts.contains(p);
  }

  public Set getActions()
  {
    return actions;
  }

  public void calculateRP()
  {
    if (!RPCalculated)
    {
      RelaxedPlan = (TotalOrderPlan) RPG.getPlan(this);
      helpfulActions = new HashSet();
      if (!(RelaxedPlan == null))
      {
        HValue = new BigDecimal(RelaxedPlan.getPlanLength());

        Iterator it = RelaxedPlan.iterator();
        while (it.hasNext())
        {
          Action a = (Action) it.next();
          if (RPG.getLayer(a) == 0) helpfulActions.add(a);
        }
      }
      else HValue = javaff.JavaFF.MAX_DURATION;
      RPCalculated = true;
    }
  }

  public BigDecimal getHValue()
  {
    calculateRP();
    return HValue;
  }

  public BigDecimal getGValue()
  {
    return new BigDecimal(plan.getPlanLength());
  }

  public Plan getSolution()
  {
    return plan;
  }

  public boolean equals(Object obj)
  {
    if (obj instanceof STRIPSState)
    {
      STRIPSState s = (STRIPSState) obj;
      return s.facts.equals(facts);
    }
    else return false;
  }

  public int hashCode()
  {
    int hash = 7;
    hash = 31 * hash ^ facts.hashCode();
    return hash;
  }


}
TOP

Related Classes of javaff.planning.STRIPSState

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.