(defrule allocate-resource
    (declare (auto-focus TRUE))
    (DOMAIN::group (id ?group) (unit-cpu ?unit-cpu) (unit-memory ?
unit-memory))
    ?deployment-state <- (DOMAIN::deployment-state
        (placement-strategy ?strategy) (placmeent-type ?type) (id ?
state)
        (plan ?plan) (current-cpu ?current-cpu) (current-memory ?
current-memory))
    (DOMAIN::host-association (host ?host) (state ?state))
    (DOMAIN::deployment-plan (id ?plan) (group ?group)
        (maximum-memory ?maximum-memory&:(<= (+ ?current-memory ?unit-
memory) ?maximum-memory))
        (maximum-cpu ?maximum-cpu&:(<= (+ ?current-cpu ?unit-cpu) ?
maximum-cpu))
        {minimum-memory <= maximum-memory && minimum-cpu <= maximum-
cpu}
        {(minimum-memory > ?current-memory) || (minimum-cpu > ?
current-cpu)})
    ?candidate <- (DOMAIN::host-resources (id ?candidate) (host ?host)
        (available-memory ?available-memory&:(>= ?available-memory ?
unit-memory))
        (available-cpu ?available-cpu&:(>= ?available-cpu ?unit-cpu)))
    ?host-resources <- (accumulate
        (bind ?resources new jess.ValueVector)
        (?resources add ?r)
        ?resources
        (and
            (DOMAIN::host-association (host ?h) (state ?state))
            (DOMAIN::host-resources (id ?r)  (host ?h))
            )
        )
    =>
    (bind ?resource (select-resource ?candidate ?unit-cpu ?unit-
memory (accumulate-resources ?host-resources) ?strategy ?type))
    (modify ?resource
        (available-memory (- (fact-slot-value ?resource available-
memory) ?unit-memory))
        (available-cpu (- (fact-slot-value ?resource available-cpu) ?
unit-cpu)))
    (assert (DOMAIN::resource (host ?host) (plan ?plan) (memory ?unit-
memory) (cpu ?unit-cpu)))
    (modify ?deployment-state
        (current-cpu (+ ?current-cpu ?unit-cpu)) (current-memory (+ ?
current-memory ?unit-memory)))
    )

The variable ?host-resources is the one which is remains undefined.
Note that if ?candidate is set, the accumulated set should have at
least 1 member...

On Oct 16, 2008, at 10:54 AM, Ernest Friedman-Hill wrote:

Well, off the top of my head, this should only happen if the
accumulate is in an "or", and the rule is firing on a branch not
containing the accumulate.

Can I see the rule?



Under what circumstances with the accumulate CE not set the variable?
For example:

?var <- (accumulate ....)

When will ?var not be set?

What I'm seeing is that I'm using accumulate as the last pattern on
the LHS of a rule.  The rule is evaluated and I'm using the variable
assigned to the result of the accumulate CE and Jess is throwing the
exception "No such variable var".  As you can imagine, this is
driving
me rather batty trying to figure out what I'm doing wrong...


--------------------------------------------------------------------
To unsubscribe, send the words 'unsubscribe jess-users [EMAIL PROTECTED]
'
in the BODY of a message to [EMAIL PROTECTED], NOT to the list
(use your own address!) List problems? Notify [EMAIL PROTECTED]
.
--------------------------------------------------------------------

---------------------------------------------------------
Ernest Friedman-Hill
Informatics & Decision Sciences, Sandia National Laboratories
PO Box 969, MS 9012, Livermore, CA 94550
http://www.jessrules.com







--------------------------------------------------------------------
To unsubscribe, send the words 'unsubscribe jess-users
[EMAIL PROTECTED]'
in the BODY of a message to [EMAIL PROTECTED], NOT to the list
(use your own address!) List problems? Notify [EMAIL PROTECTED]
.
--------------------------------------------------------------------


Reply via email to