ConfigureBlockPlan.java

package jadex.examples.blocksworld;

import java.util.*;
import jadex.runtime.*;


/**
* Stack blocks according to the target configuration.
*/
public class ConfigureBlocksPlan extends Plan
{
//-------- attributes --------

/** The desired target configuration. */
protected Table configuration;

//-------- constructors --------

/**
* Create a new plan.
*/
public ConfigureBlocksPlan()
{
this.configuration = (Table)getParameter("configuration").getValue();
}

//-------- methods --------

/**
* The plan body.
*/
public void body()
{
// Create set of blocks currently on the table.
Table table = (Table)getBeliefbase().getBelief("table").getFact();
Block[] blocks = table.getAllBlocks();
Set oldblocks = new HashSet();
for(int i=0; i<blocks.length; i++)
oldblocks.add(blocks[i]);

// Move all blocks in configuration to desired target location.
Block[][] stacks = configuration.getStacks();
for(int i=0; i<stacks.length; i++)
{
for(int j=0; j<stacks[i].length; j++)
{
// Get blocks from beliefs.
Block block = (Block)getBeliefbase().getBeliefSet("blocks").getFact(stacks[i][j]);
Block target = stacks[i][j].getLower()==configuration ? table
: (Block)getBeliefbase().getBeliefSet("blocks").getFact(stacks[i][j].getLower());

// Create stack goal.
IGoal stack = createGoal("stack");
stack.getParameter("block").setValue(block);
stack.getParameter("target").setValue(target);
dispatchSubgoalAndWait(stack);

// Remove processed block from oldblocks.
oldblocks.remove(block);
}
}

// Move old blocks, which are not part of configuration, to bucket.
Object bucket = getBeliefbase().getBelief("bucket").getFact();
for(Iterator i=oldblocks.iterator(); i.hasNext(); )
{
// Create stack goal.
IGoal stack = createGoal("stack");
stack.getParameter("block").setValue(i.next());
stack.getParameter("target").setValue(bucket);
dispatchSubgoalAndWait(stack);
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值