-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fixed occlusion algorithm and enhanced variable assignment #21
Conversation
We need to fix unit tests to handle this new concept |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All tests pass now
To remember: |
Additionally, I have enhanced generation of future possible states (and initial state 0) so in optimistic case the computation time could be far less than exponential and I have deleted cumbersome code from previous brute-force approach. Now code that generates new states is much more elegant + it uses a nontrivial assignment algorithm. I guess this improvement is also much desired. |
TODO: Requires changing the documentation by adding some brief explanation about the set of fluents that are excluded from modification |
Ola, Taras --- check --- this --- out --- the occlusion mechanism we've all been waiting for! NO CNF form breakdown, NO variable annihilation, NO NO NO. The basis for correctness of this computational idea lies in the following statement:
CONSEQ = (the cumulative consequence of all relevant causes postconditions)
consider all valid assignments of fluents that satisfy CONSEQ where fluent F is true
if all of the valid assignments described above EXACTLY MATCH (excluding the fluent F itself) all valid assignments of fluents that satisfy CONSEQ where fluent F is FALSE then the fluent F shall be regarded as redundant and expelled from the garden of occlusion function.
Other fluents shall be kept in the occlusion function and rejoice.
Sample logic formulae where this idea works:
f and not f
(f or not f) and g
(f and g and h) or (not f and g and h) or (f and not g and h) or (not f and not g and h)