← Back to team overview

widelands-dev team mailing list archive

Re: *** GMX Spamverdacht *** Re: Fwd: can find any more resources

 

On 29.07.2014, at 22:56, Tibor Bamhor <tiborb95@xxxxxxxxx> wrote:

> This sounds very good.
> 
> I just proposed my ai branch for merge, I will see how it goes, but I hope it will be merged soon and what is discussed here will be implemented next time.
> 
> 
> 2014-07-29 20:46 GMT+02:00 Fòram na Gàidhlig <fios@xxxxxxxxxxxxxxxxxxx>:
> I've done a bit of refactoring today in this branch:
> 
> https://code.launchpad.net/~widelands-dev/widelands/bug-1348795
> 
> Check out the new ProductionSite::out_of_resources function - when that
> function sends a message to the player would be the point where the AI
> should do something about the building.
> 
> I don't know how the AI API works, but I guess you would either access
> the message or set a flag in the production site for the I to read.

That is a bad coupling direction: logic should not know about AI and should not offer services for it. For this purpose we have notifications.h. The logic should publish a Note here that the AI should subscribe to. For an example see src/logic/immovable.h, struct NoteImmovable. The logic will not care about who subscribes or if anybody subscribes at all. notifications/ contains a simple test case that shows how to use the API.


> 
> Message sender at the moment is "produce" or "mine". I don't really know
> what the sender is for, so if it doesn't break anything, feel free to
> change the sender as needed.

The sender is just a string imho. I do not think it is used for anything and I wonder why it is there….

> 
> 
> 
> 29/07/2014 11:19, sgrìobh Tibor Bamhor:
> > This is probably good idea, but how to implement it?
> >
> > In current AI I found following piece of code:
> >
> >
> > // Subscribe to NoteFieldPossession.
> > field_possession_subscriber_ =
> >   Notifications::subscribe<NoteFieldPossession>([this](const
> > NoteFieldPossession& note) {
> >   if (note.player != player_) {
> >   return;
> >   }
> >   if (note.ownership == NoteFieldPossession::Ownership::GAINED) {
> >   unusable_fields.push_back(note.fc);
> >   }
> > });
> >
> > Can somebody direct me further?
> >
> > Thanks
> >
> > Tibor
> >
> >
> > 2014-07-29 12:02 GMT+02:00 Fòram na Gàidhlig <fios@xxxxxxxxxxxxxxxxxxx
> > <mailto:fios@xxxxxxxxxxxxxxxxxxx>>:
> >
> >     You could check for the code where production programs (for mines) and
> >     production sites (for other sites) send "Out of Resources" messages. The
> >     production program has a handle on the production site, so both of these
> >     could set a flag in the production site that the AI could check for, or
> >     whenever the player gets a notification message the AI gest a message as
> >     well. This way, the calculation of the check if a site is out of
> >     resources remains with the production and worker programs.
> >
> >
> >
> >     29/07/2014 08:52, sgrìobh Tibor Bamhor:
> >     > SirVer,
> >     >
> >     >
> >     > I tried, spend some time, but all those namespaces, classes, virtual
> >     > functions are too complicated to me. I even failed to identify a place
> >     > (source file) where such function would logically belong.
> >     >
> >     >
> >     > :(
> >     >
> >     >
> >     >
> >     > 2014-07-25 22:58 GMT+02:00 Holger Rapp <HolgerRapp@xxxxxxx
> >     <mailto:HolgerRapp@xxxxxxx>
> >     > <mailto:HolgerRapp@xxxxxxx <mailto:HolgerRapp@xxxxxxx>>>:
> >     >
> >     >     Hooray \o/ !!!
> >     >
> >     >     On 25.07.2014, at 22:23, Tibor Bamhor <tiborb95@xxxxxxxxx
> >     <mailto:tiborb95@xxxxxxxxx>
> >     >     <mailto:tiborb95@xxxxxxxxx <mailto:tiborb95@xxxxxxxxx>>> wrote:
> >     >
> >     >>     I will look at it...and do what I can..
> >     >>
> >     >>
> >     >>     2014-07-25 22:08 GMT+02:00 Holger Rapp <HolgerRapp@xxxxxxx
> >     <mailto:HolgerRapp@xxxxxxx>
> >     >>     <mailto:HolgerRapp@xxxxxxx <mailto:HolgerRapp@xxxxxxx>>>:
> >     >>
> >     >>         Which just strengthens my argument, right? The code there is
> >     >>         already copy and pasted and if anything changes you have to
> >     >>         change it twice. With your change we need to change it three
> >     >>         times.
> >     >>
> >     >>         You are a good programmer and can do it. If you do not do it
> >     >>         you accrue technical debt that others have to suffer under
> >     >>         later on.
> >     >>
> >     >>
> >     >>         On 25.07.2014, at 21:52, Tibor Bamhor <tiborb95@xxxxxxxxx
> >     <mailto:tiborb95@xxxxxxxxx>
> >     >>         <mailto:tiborb95@xxxxxxxxx <mailto:tiborb95@xxxxxxxxx>>>
> >     wrote:
> >     >>
> >     >>>         similar procedure is used twice in
> >     production_program.cc, but
> >     >>>         both istances adds some own woodo-magic I dont fully
> >     >>>         understand and dont need. So there is no
> >     count-resources-only
> >     >>>         algorithm used there so for me it is hard to integrate.
> >     Maybe
> >     >>>         for more skilled programmer it would be doable...
> >     >>>
> >     >>>
> >     >>>         2014-07-25 21:35 GMT+02:00 Holger Rapp
> >     <HolgerRapp@xxxxxxx <mailto:HolgerRapp@xxxxxxx>
> >     >>>         <mailto:HolgerRapp@xxxxxxx <mailto:HolgerRapp@xxxxxxx>>>:
> >     >>>
> >     >>>
> >     >>>             On 25.07.2014, at 21:31, Tibor Bamhor
> >     <tiborb95@xxxxxxxxx <mailto:tiborb95@xxxxxxxxx>
> >     >>>             <mailto:tiborb95@xxxxxxxxx
> >     <mailto:tiborb95@xxxxxxxxx>>> wrote:
> >     >>>
> >     >>>>             Hi,
> >     >>>>
> >     >>>>             In the meantime I looked into particular cc file (I
> >     dont
> >     >>>>             remember which one) and in AI I implemented basically
> >     >>>>             the same procedure - AI counts current and starting
> >     >>>>             amount of resources within radius around a mine and
> >     >>>>             calculate the % of exhaustion.
> >     >>>
> >     >>>             That is really bad. We already have enough copy & pasted
> >     >>>             code in Widelands. Please do not add to this. Pull the
> >     >>>             common function into a new common header and use it from
> >     >>>             the AI and the old code, please.
> >     >>>
> >     >>>>             Seems it works fine.
> >     >>>>
> >     >>>>             Also it would be usefull if AI could query&modify
> >     ware's
> >     >>>>             target quantities. So far there are no ready-for-AI
> >     >>>>             functions for this it seems. I am considering to write
> >     >>>>             them, but perhaps some more skillfull programmer could
> >     >>>>             do the job.
> >     >>>>
> >     >>>>             To be consistent with similar functions used by AI, new
> >     >>>>             functions could be:
> >     >>>>             int send_player_get_ware_target(ware)
> >     >>>>             bool send_player_set_ware_target(ware, int)
> >     >>>>
> >     >>>>
> >     >>>>
> >     >>>>
> >     >>>>
> >     >>>>
> >     >>>>             2014-07-25 21:01 GMT+02:00 Holger Rapp
> >     >>>>             <HolgerRapp@xxxxxxx <mailto:HolgerRapp@xxxxxxx>
> >     <mailto:HolgerRapp@xxxxxxx <mailto:HolgerRapp@xxxxxxx>>>:
> >     >>>>
> >     >>>>
> >     >>>>                 On 25.07.2014, at 00:04, Tibor Bamhor
> >     >>>>                 <tiborb95@xxxxxxxxx <mailto:tiborb95@xxxxxxxxx>
> >     <mailto:tiborb95@xxxxxxxxx <mailto:tiborb95@xxxxxxxxx>>> wrote:
> >     >>>>
> >     >>>>>                 well, after some investigation in code it seems
> >     >>>>>                 that mine is able to mine some % of resources
> >     >>>>>                 within some radius. Obviously it does not mine
> >     >>>>>                 resources evenly across fields, so to check one
> >     >>>>>                 (even central) field is not enough.
> >     >>>>
> >     >>>>                 You could randomize the field that resources are
> >     >>>>                 taken from, so that this happens evenly.
> >     >>>>
> >     >>>>>
> >     >>>>>                 Also it seems that there is no avaiable
> >     function to
> >     >>>>>                 query if mineable resources are mined or not yet.
> >     >>>>>                 Of course, the mine sends a message ("cant
> >     find any
> >     >>>>>                 more resources") but I am not sure if AI can
> >     easily
> >     >>>>>                 read them. It would help much…
> >     >>>>
> >     >>>>                 So there must be a method in the mine that does it
> >     >>>>                 already. You can pull it out and make it available
> >     >>>>                 for the AI to use. Something like void
> >     >>>>                 percentage_of_coal_available(field, radius,
> >     >>>>                 coal_resource_index,
> >     >>>>                 & total_pieces_of_coal_at_start,
> >     >>>>                 &total_pieces_of_coal_now);
> >     >>>>
> >     >>>>>
> >     >>>>>
> >     >>>>>
> >     >>>>>                 ---------- Forwarded message ----------
> >     >>>>>                 From: *Tibor Bamhor* <tiborb95@xxxxxxxxx
> >     <mailto:tiborb95@xxxxxxxxx>
> >     >>>>>                 <mailto:tiborb95@xxxxxxxxx
> >     <mailto:tiborb95@xxxxxxxxx>>>
> >     >>>>>                 Date: 2014-07-24 23:05 GMT+02:00
> >     >>>>>                 Subject: can find any more resources
> >     >>>>>                 To: widelands-dev@xxxxxxxxxxxxxxxxxxx
> >     <mailto:widelands-dev@xxxxxxxxxxxxxxxxxxx>
> >     >>>>>                 <mailto:widelands-dev@xxxxxxxxxxxxxxxxxxx
> >     <mailto:widelands-dev@xxxxxxxxxxxxxxxxxxx>>
> >     >>>>>
> >     >>>>>
> >     >>>>>                 Hi,
> >     >>>>>
> >     >>>>>                 Please explain to me:
> >     >>>>>
> >     >>>>>                 I am watching a game (testing AI), there is a mine
> >     >>>>>                 that shows "can't find any more resources",
> >     >>>>>                 performance % is 0, it is full of food, yet when I
> >     >>>>>                 click on it and click DBG it shows coal: 19/20.
> >     >>>>>                 This is coal mine (the first/lowest level of
> >     mine).
> >     >>>>>
> >     >>>>>                 Now for AI it is quite relevant question - AI test
> >     >>>>>                 remaining resource on the field and if 0, the mine
> >     >>>>>                 is to be dismounted. But if mine is not able to
> >     >>>>>                 mine all resources on a field, then things are
> >     >>>>>                 getting more complicated.
> >     >>>>>
> >     >>>>>                 Now I noticed that mines have aihint like
> >     >>>>>                 mines_percent=30. Does it mean that this mine can
> >     >>>>>                 mine only 30% of initial amount 20? 30% of 20 is 6
> >     >>>>>                 so the mine should stuck on remaining resources
> >     >>>>>                 14/20, or not?
> >     >>>>>
> >     >>>>>                 Waiting for explanation, thanks!
> >     >>>>>
> >     >>>>>                 Tibor
> >     >>>>>
> >     >>>>>
> >     >>>>>                 _______________________________________________
> >     >>>>>                 Mailing list: https://launchpad.net/~widelands-dev
> >     >>>>>                 Post to     :
> >     widelands-dev@xxxxxxxxxxxxxxxxxxx
> >     <mailto:widelands-dev@xxxxxxxxxxxxxxxxxxx>
> >     >>>>>                 <mailto:widelands-dev@xxxxxxxxxxxxxxxxxxx
> >     <mailto:widelands-dev@xxxxxxxxxxxxxxxxxxx>>
> >     >>>>>                 Unsubscribe : https://launchpad.net/~widelands-dev
> >     >>>>>                 More help   : https://help.launchpad.net/ListHelp
> >     >>>>
> >     >>>>
> >     >>>>             _______________________________________________
> >     >>>>             Mailing list: https://launchpad.net/~widelands-dev
> >     >>>>             Post to     : widelands-dev@xxxxxxxxxxxxxxxxxxx
> >     <mailto:widelands-dev@xxxxxxxxxxxxxxxxxxx>
> >     >>>>             <mailto:widelands-dev@xxxxxxxxxxxxxxxxxxx
> >     <mailto:widelands-dev@xxxxxxxxxxxxxxxxxxx>>
> >     >>>>             Unsubscribe : https://launchpad.net/~widelands-dev
> >     >>>>             More help   : https://help.launchpad.net/ListHelp
> >     >>>
> >     >>>
> >     >>
> >     >>
> >     >
> >     >
> >     >
> >     >
> >     > _______________________________________________
> >     > Mailing list: https://launchpad.net/~widelands-dev
> >     > Post to     : widelands-dev@xxxxxxxxxxxxxxxxxxx
> >     <mailto:widelands-dev@xxxxxxxxxxxxxxxxxxx>
> >     > Unsubscribe : https://launchpad.net/~widelands-dev
> >     > More help   : https://help.launchpad.net/ListHelp
> >     >
> >     >
> >     >
> >     > No virus found in this message.
> >     > Checked by AVG - www.avg.com <http://www.avg.com> <http://www.avg.com>
> >     > Version: 2014.0.4716 / Virus Database: 3986/7937 - Release Date:
> >     07/28/14
> >     >
> >
> >     _______________________________________________
> >     Mailing list: https://launchpad.net/~widelands-dev
> >     Post to     : widelands-dev@xxxxxxxxxxxxxxxxxxx
> >     <mailto:widelands-dev@xxxxxxxxxxxxxxxxxxx>
> >     Unsubscribe : https://launchpad.net/~widelands-dev
> >     More help   : https://help.launchpad.net/ListHelp
> >
> >
> > No virus found in this message.
> > Checked by AVG - www.avg.com <http://www.avg.com>
> > Version: 2014.0.4716 / Virus Database: 3986/7942 - Release Date: 07/29/14
> >
> 
> _______________________________________________
> Mailing list: https://launchpad.net/~widelands-dev
> Post to     : widelands-dev@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~widelands-dev
> More help   : https://help.launchpad.net/ListHelp
> 
> _______________________________________________
> Mailing list: https://launchpad.net/~widelands-dev
> Post to     : widelands-dev@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~widelands-dev
> More help   : https://help.launchpad.net/ListHelp

Attachment: smime.p7s
Description: S/MIME cryptographic signature


Follow ups

References