lsa-pucrs / mas-pc-pucrs-2016

Repository for the 2016 MAS programming contest: https://multiagentcontest.org/
2 stars 1 forks source link

Item price on shops #9

Closed anibalsolon closed 9 years ago

anibalsolon commented 9 years ago

Caros,

fiz com que o agente fosse direto para um shop, sempre monitorando as informações de preços que ele possui e recebi normalmente.

Segue debug do Jason: screen_20150617_001

Então acho que não é um problema isso, certo? O que percebi que vamos ter que nos preocupar também é o restock interval. Pode ter uma probabilidade de ainda ter no estoque do shop o item, baseado nas visitas do inimigo ao shop, coisa assim. Mas pensamos isso mais para frente.

rafaelcaue commented 9 years ago

Sim era exatamente isso que queriamos testar, obrigado Anibal!

Aproveitando o embalo, tu percebeu a distancia que o agente estava do shop quando ele recebeu isso?

Conversei com o Artur aqui do lado e podemos inicialmente mandar os agentes mais próximos aos shops para descobrir os preços, e aí eles enviam para o lider.

Também temos que descobrir o que acontece quando todos items são comprados, e o que o parametro de restoque significa (acredito que seja o ultimo dos 3 numeros dessa print). Mas para isso vamos ter que testar se o buy está funcionando sem problemas.

anibalsolon commented 9 years ago

Parece que é quando ele chega no shop:

shop(shop1,52.3619,9.7299,[item(tool2),item(base1),item(base2),item(tool1),item(base3)])
routeLength(2)
shop(shop1,52.3619,9.7299,[item(tool2),item(base1),item(base2),item(tool1),item(base3)])
routeLength(0)
shop(shop1,52.3619,9.7299,[availableItem(tool2,139,3,0),availableItem(base1,5,508,2),availableItem(base2,17,56,3),availableItem(tool1,51,9,5),availableItem(base3,241,34,4)])
routeLength(0)
shop(shop1,52.3619,9.7299,[availableItem(tool2,139,3,0),availableItem(base1,5,509,2),availableItem(base2,17,56,3),availableItem(tool1,51,9,5),availableItem(base3,241,35,4)])
[vehicle] Arrived in shop1

No código do servidor, a reposição é feita unitariamente a cada X steps. Ou seja, se a reposição é feita a cada 7 passos, nos passos [ 7, 14, 21, 28 ... ] são acrescidos 1 item no estoque.

public void restock(int step){
    for (Entry<Item, ShopStock> stockEntry : stock.entrySet()){
        ShopStock stockItem = stockEntry.getValue();
        if (stockItem.restock != 0 && step % stockItem.restock == 0){
            stockItem.amount++;
        }
    }
}
Maumagnaguagno commented 9 years ago

Parece que é quando ele chega no shop

Então o que eles queriam dizer com estar perto é o mesmo que no shop.

No código do servidor, a reposição é feita unitariamente a cada X steps

Seria interessante usar um contador de steps para descobrir esse X em tempo de execução, eventualmente poderíamos decidir ir a outro shop ao invés de esperar o restock.

rafaelcaue commented 9 years ago

Seria interessante usar um contador de steps para descobrir esse X em tempo de execução, eventualmente poderíamos decidir ir a outro shop ao invés de esperar o restock.

Para isso vamos precisar deixar um agente parado nos shops até descobrir o X de cada item em cada shop. Talvez se não tiver nenhum job no momento podemos fazer isso.

anibalsolon commented 9 years ago

O tempo de restock é informado pela percepção ao chegar no shop, não tem como inferir sem chegar até o shop:

availableItem(base1,5,509,2) // a cada dois steps, amount++

Se o tempo de restock é zero, não tem reposição. :sob:

O que dá para fazer é saber a quantidade de itens enquanto nenhum inimigo passou pelo shop, mas depois de algum passar por lá, não tem como saber se a quantidade ainda é válida. Dá pra saber algo tipo: um inimigo passou por lá no step 10, então no step 21 é 100% certo que tem pelo menos 2 unidades do item Y.

rafaelcaue commented 9 years ago

Ah sim verdade, to viajando, no início eu mesmo falei e depois esqueci.

Vamos ter que passar nos shops de qualquer maneira uma vez para descobrir os preços, já salvamos o restock para futuramente utilizarmos essa info nos contextos dos planos quando precisar.

A quantidade a principio acho que não vale a pena salvar. Da para fazer um estratégia de espionagem para tentar descobrir os jobs que o inimigo está fazendo observando as quantidades de itens nos shops, mas essa já uma estratégia avançada, vamos começar pelo dummy e depois retomamos a ideia.

rafaelcaue commented 9 years ago

Resolvido.