Op 22-02-13 10:11, Michiel Vermandel schreef:
Well,

I need to solve - let's say - a complex 2 dimensional puzzle.
The goal is to fill a 2D rectangle (with fixed dimensions) out of "puzzle pieces" that do not have a fixed shape.
A puzzle piece is built out of a number of bars of variable length and the bars can slide against each other (to some extend: differs per joint of two bars).

Just shifting and swapping around the "puzzle pieces" is not quite well performing since that will result in many
violations although a shift or swap could match perfectly if you slide (some of) the bars of the piece at the same time.
In one implementation we added an extra "score level", a subsoft level, to make the score function favor "defragmented" solutions (less small gaps between items).
This technique is proven to work out well. Too bad that HardMediumSoftScore and BendableScore aren't available in 5.5.0.Final yet: just copy paste one of them from master into your package structure.


Feeding all possible combinations of shifts and swaps combined with all possible forms of the pieces would result in ... well quite a lot of combinations.
If you create them JIT enabled, that should be fine. Either combing existing moveSelectors with cartesianProduct, and make sure they are all selectionOrder RANDOM,
or use MoveIteratorFactory (as opposed to MoveListFactory)
So I want to build a smarter mover that "knows" how to slide a piece in order to fit it in an available place (or swap it with an other piece to improve both pieces match).
I think the mover would perform far better if I have a "bit-map" that contains the 2D representation of the way everything is placed and which could calculate the best layout of the piece before putting it into the puzzle.

Therefor I would like to know the last change applied so I can incrementally update the bit-map instead of recalculating it entirely every time.
Because doing it in the ScoreDirectory all the time is annoying, I see. Makes sense if you want to go this way.

Hey, hmmm... maybe I don't need to know the last accepted move. Just finding the diff between best-solution and previous best-solution might do the trick?!

For finding the best layout of a single piece, ?could I use a second instance of planner that does a "normal" bin-packaging of a single piece in the available container (container is then an available free area or the combination of one or more other pieces and the free space around that other piece)?

Maybe I'm going goofy on this... too many long nights are beginning to cloud my mind.
I seriously doubt this is the right path to go.
- It sounds like you're making everything far more complex than it needs to be. Re-examen your domain model. Compare it with the curriculum course domain model.
- Trying to guide what local search actually needs to select doesn't usually work out well. It often does more harm than good after the 1 minute of running. If you go down this path, at least give local search multiple area's that you're focusing on.
- Given the dilemma, I would strongly prefer "cartesian moves" (= a single move that does 2 moves) over "let's see what move local search ended up taking and try to now select a companion move in that area". That second approach is pretty much doomed in my eyes.

Well, any ideas are welcome.

Regards.
 
-----------------
http://www.codessentials.com - Your essential software, for free!
Follow us at http://twitter.com/#!/Codessentials

From: Geoffrey De Smet <ge0ffrey.spam@gmail.com>
To: rules-users@lists.jboss.org
Sent: Thursday, February 21, 2013 10:37 AM
Subject: Re: [rules-users] Planner: Is it possible to know which move was selected on step-end?

Officially, in the public api (aka the "user facing api"), there's no such listener.
Why would you need this at runtime?
Open an issue: if there's a good reason to need this, we can talk about adding it to the public api.
  https://issues.jboss.org/browse/PLANNER


That being said and handled first, the benchmarker actually hacks a step listener if I recall correctly:
https://github.com/droolsjbpm/drools-planner/tree/master/drools-planner-benchmark/src/main/java/org/drools/planner/benchmark/core/statistic/calculatecount

Op 20-02-13 21:56, Michiel Vermandel schreef:
Hi,

Is it possible to capture which move was selected on step-end?
I don't mean in the logging but by event or custom selector or... ?

Thanks

Michiel
 
-----------------
http://www.codessentials.com - Your essential software, for free!
Follow us at http://twitter.com/#!/Codessentials


_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users



_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users