[freeciv-ai] Re: Hi, I'm back. aiclient
[Top] [All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
El Lun 30 Jun 2003 10:31, escribió:
> int base_get_attack_power(Unit_Type_id type, bool veteran, int moves_left)
> {
> int power;
>
> power = get_unit_type(type)->attack_strength * POWER_FACTOR;
> if (veteran) {
> /* Veterans get +50% bonus. */
> power = (power * 3) / 2;
> }
>
> if (!unit_type_flag(type, F_IGTIRED) && moves_left < SINGLE_MOVE) { ; I
don't understand this rule very much, I'd have to read more about
unit_type_...
> power = (power * moves_left) / SINGLE_MOVE;
> }
> return power;
> }
>
Well, If I remember correctly Clips, would be:
Using Clips, an expert system language:
(defrule static-attack-power
" This rule will trigger whenever a unit is created or its veteran-factor
changed"
?w<- (unit (type ?x) (veteran-factor ?v)) ;?v value will set somewhere else
(typeunit (type ?x) (strength ?s))
=>
(modify (?w (staticattack-power (* ?v ?s))
)
(defrule dinamic-attack-power
(unit (tired 0))
(constsinglemove ?v)
?w <- (unit (type ?x) (movesleft ?m:(< ?m ?v) )
=>
(?w <-(unit ) ...)
)
(defrule base-get-attack-power
( attacking-unit (unit-id ?u) (type ?x))
?w <- ( unit (staticattack-power ?p) (dynamicattack-power ?d)))
=>
(assert (attack-power (unit-id ?u) (power.... )))
Perhaps the code would not be thus, since I'm not totally fresh on Clips, may
be (unit (ljlkj) ) things would be reworked in mulitple facts so the rules
don't retrigger themselves. But the idea can be that. Or perhaps it can be
switchd the view and have:
(veteran-factor (unit-id ?u ) (value ?v)) , and that sort of things.
Apparently is even more complex. But let's see it integrated in the "whole":
- When you call the C function you have to store the "power" value and take a
decision *promptly" somewhere. Somehow it provokes that the decission must be
taken soon, and in an "if" branch up in the stack of calls.
- C is a model that has only the info to be used at the moment, and to use
some info (attack power) you have to request for it.
Now Clips mode:
- Whenever anything changes in the game (a unit becomes veteran) , all the
related facts about it , such base-get-attack-power, defense... become
updated at the moment. That provides a pool of asserted facts ready to be
included in some rules of high order. Like the fact defense-power-of-city,
attack-power-of-fleet... I mean that in Clips model , you have all the info
concurrently ready to be used, you don't have to call any function to work
out values and then produce a single "isolated" value, that most likely will
be consumed within a "chain" of decision.
In Clips you'd have "tree" of decisions and "trees" of reactions. A single
change will recreate a tree of facts.
Needless to say, this model is richer and thought-provoking. The logic may
seem the same , the difference is in the data: more and more interrelated and
usable.
The difference (C-Clips) doesn't come in isolated rules, but in the behaviour
of sets of rules. In C they're line-chained, call-by-call, in Clips are
"explosion"-like , a single change trigger changes in many variables
(decissions to be taken). In C you focus on the "function" the call, in Clips
you focus on the state, the fact. C is imperative, Clips "logic" or better
"stative". With the same effort, because the logic for producing a value/fact
is the same in C or Clips (you somehow must generate the value with if's or
defrules), in Clips you keep a "trace" of facts and a set of facts, that in C
would had remained as local variables or returned values, hard to relate,
once the "initial call" has ended.
Prolog would be pretty much the same, and better, since Prolog can "fill" the
gaps and "search for" a solution, not simply fact-making.
---
mga
- [freeciv-ai] Hi, I'm back. aiclient, Manuel Gutierrez Algaba, 2003/06/28
- Message not available
- Message not available
- [freeciv-ai] Re: Hi, I'm back. aiclient, Manuel Gutierrez Algaba, 2003/06/29
- [freeciv-ai] Re: Hi, I'm back. aiclient, Raimar Falke, 2003/06/30
- [freeciv-ai] Re: Hi, I'm back. aiclient,
Manuel Gutierrez Algaba <=
- [freeciv-ai] Re: Hi, I'm back. aiclient, Raimar Falke, 2003/06/30
- [freeciv-ai] Re: Hi, I'm back. aiclient, Manuel Gutierrez Algaba, 2003/06/30
- [freeciv-ai] Re: Hi, I'm back. aiclient, Raimar Falke, 2003/06/30
- [freeciv-ai] Re: Hi, I'm back. aiclient, Manuel Gutierrez Algaba, 2003/06/30
[freeciv-ai] Re: Hi, I'm back. aiclient, Raimar Falke, 2003/06/30
|
|