You are here

Relatório 3 - Clarion: Controlando o WorldServer3D

Relatório 3 - Clarion: Controlando o WorldServer3D

Para executar a demonstração da atividade é necessário primeiro executar o WorldServer3D e em seguida o Clario Demo abaixo:

WorldServer3D WebStart

Clarion Demo (Linux 64)

Código Fonte do Clarion Demo

 

Teste 1: A criatura deve buscar todas as jóias designadas em seu leaflet e deve parar depois disso.

 

Nesta atividade, o Clarion Demo foi modificado para que a criatura fizesse a busca de comida e jóias contidas em seu leaflet.

Com o propósito de evitar colisões e bloquear o movimento da criatura, jóias que não estão no leaflet podem ser capturadas se estiverem no caminho.

Para que isto fosse possível as seguintes alterações foram implementadas:

Novo actionTypes foram criados para definir as novas ações:

 public enum ClarionAgentActionType
    {
        DO_NOTHING,
        ROTATE_CLOCKWISE,
        GO_AHEAD,
        MOVE_FOOD, 
        MOVE_JEWEL,
        EAT,
        GET
    }
 
Novos inputs foram definidos para representar quando existem joias ou comidas próximas ou no campo visual:
 
InputJewelSeeing = World.NewDimensionValuePair (SENSOR_VISUAL_DIMENSION, DIMENSION_JEWEL_SEEING);
InputClosestJewel = World.NewDimensionValuePair (SENSOR_VISUAL_DIMENSION, DIMENSION_CLOSEST_JEWEL);
InputFoodSeeing = World.NewDimensionValuePair (SENSOR_VISUAL_DIMENSION, DIMENSION_FOOD_SEEING);
InputClosestFood = World.NewDimensionValuePair (SENSOR_VISUAL_DIMENSION, DIMENSION_CLOSEST_FOOD); 
 
Novos chunks de outputs foram definidos para representar as ações de buscar comida, joia, capturar joia ou comer a comida:
 
OutputMoveJewel = World.NewExternalActionChunk (ClarionAgentActionType.MOVE_JEWEL.ToString()); //IA006
OutputMoveFood = World.NewExternalActionChunk (ClarionAgentActionType.MOVE_FOOD.ToString()); //IA006
OutputGet = World.NewExternalActionChunk (ClarionAgentActionType.GET.ToString()); //IA006
OutputEat = World.NewExternalActionChunk (ClarionAgentActionType.EAT.ToString()); //IA006
 
Foram criadas regras no ACS para que fosse possivel interpretar as novas ações através de um SupportCalculator. Por Exemplo:
/// IA006 Regra para buscar uma joia
SupportCalculator moveJewelSupportCalculator = FixedRuleDelegateToMoveJewel;
FixedRule ruleMoveJewel = AgentInitializer.InitializeActionRule(CurrentAgent, FixedRule.Factory, OutputMoveJewel, moveJewelSupportCalculator);
CurrentAgent.Commit(ruleMoveJewel);
 
No método MakePerceptionFromSensorialInput está a principal regra para detectar e definir prioridades do que há no campo visual:
 
1. Se apenas houver bricks no campo visual, a criatura deve girar até encontrar algo.
2. Escolher a comida mais proxima se esta estiver ha uma distancia inferior a 30 posições.
3. Se não houver comida proxima, escolher a joia mais próxima se esta estiver ha uma distancia inferior a 30 posições.
4. Se não houver comida ou joia proximas, escolher a comida mais próxima que esteja há uma distancia superior a 30 posições
5. Se nada mais importante estiver próximo, escolher a jóia (que esteja no leaflet) mais próxima que esteja há uma distancia superior a 30 posições
 
Para verificar se a joia está no leaflet da criatura, foi implementado um novo método na classe Creature.cs para fazer esta tarefa:
 
public Boolean inLeaflet(string color){
    //Verifica se a joia da cor esta disponivel no leaflet
    Dictionary<string,LeafletItem> l = getConsolidatedLeaflet();
    foreach(var pair in l) {
        if (pair.Key == color && pair.Value.totalNumber > 0){
            return true;
        }
    }
    return false;
}
 
Foram então implementados novos Delegate Methods para definir o que fazer caso algo seja identificado no campo visual:
 
1. Se houver bricks no campo visual, a criatura deve girar
2. Se houver jóias distantes no campo visual, deve mover-se a esta joia
3. Se houver comida distantes no campo visual, deve mover-se a esta comida
4. Se houver joia proxima, deve pegar esta joia
5. Se houver comida próxima, deve come-la
 

Teste 2: Duas criaturas devem competir para buscaras jóias que lhes foram delegadas. A primeira delas será a criatura com o controlador desenvolvido em SOAR na aula 7. A segunda será a criatura com o controlador usando o Clarion.

Nesta atividade, iniciou-se o WorldServer3D, o Clarion Demo e em seguida o DemoSoar apresentado no relatório passado.
O tabuleiro do world server foi populado pelo Clarion Demo, no entanto a criatura Soar nao se movimentou.
As joias foram capturadas apenas pela criatura controlada pelo Clarion.
 
 

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer