<div dir="ltr">Thanks a lot, yeah nearBySelection is probably what I would need, too bad it&#39;s not out yet :(<div><br></div><div>As for the custom MoveListFactory, I found out what I&#39;m trying to do has an off the charts complexity. It basically has to find all subsets of planning variables of a given size (combinations with repetition) which is the number of entities I want to move at once... Worst case has a complexity of something like O(4^n/sqrt(pi n))... It gets unmanagable pretty soon unfortunately.</div>
<div><br></div><div>I&#39;m not sure what I&#39;ll be doing but it seems like I&#39;ll have to do without those constraints at first... Thanks again for your help however !</div><div><br></div><div>Best regards,</div><div>
<br></div><div>Woody</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2014-06-25 13:18 GMT+02:00 Geoffrey De Smet <span dir="ltr">&lt;<a href="mailto:ge0ffrey.spam@gmail.com" target="_blank">ge0ffrey.spam@gmail.com</a>&gt;</span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000"><div class="">
    <br>
    <div>On 25-06-14 12:58, DwProd . wrote:<br>
    </div>
    <blockquote type="cite">
      <div dir="ltr">Thanks a lot for your answer !
        <div><br>
        </div>
        <div>1) I don&#39;t think pillar based moves are what I&#39;m looking
          for, except if I can select a pillar based on a Problem Fact
          (its service in my case) and then spread the different
          entities of the pillar on the available hosts (basically
          setting possibly different planning variables for the entities
          of the pillar).</div>
        <div><br>
        </div>
        <div>2) cartesianProductMoveSelector seem more like it, but the
          number of moves to combine is somewhat static is it not ? I
          can&#39;t for instance specify in a Planning Entity (using a
          property) that its move should be combined with n other moves
          of processes of the same type ? <br>
        </div>
      </div>
    </blockquote></div>
    That would be nearBySelection... (note: the name might change before
    I implement).<br>
    You need to be able to tell optaplanner that processes of the same
    type are &quot;near&quot; (~related) to each other and should be moved
    together.<br>
    As stated before, I am working on this for 6.2.<div class=""><br>
    <blockquote type="cite">
      <div dir="ltr">
        <div><br>
        </div>
        <div>3) I feel like my usecase is complicated enough to have to
          resort to that if there is no built in way to handle it...
          Does this work by implementing a MoveListFactory, or a
          CompositeMove ? I don&#39;t think I quite get the difference to be
          honest...</div>
      </div>
    </blockquote></div>
    If you write a custom MoveListFactory (or MoveIteratorFactory), you
    could still opt to go with the build-in moves (such as ChangeMove)
    or combinations of those with CompositeMove. However, because those
    build-in moves require reflection stuff (VariableDescriptor etc),
    it&#39;s probably easier to just to write a domain-specific Move.<br>
    See the examples that have custom moves.<div><div class="h5"><br>
    <blockquote type="cite">
      <div dir="ltr">
        <div><br>
        </div>
        <div>Thanks again for your time,</div>
        <div><br>
        </div>
        <div>Cheers,</div>
        <div><br>
        </div>
        <div>Woody</div>
      </div>
      <div class="gmail_extra"><br>
        <br>
        <div class="gmail_quote">2014-06-25 9:37 GMT+02:00 Geoffrey De
          Smet <span dir="ltr">&lt;<a href="mailto:ge0ffrey.spam@gmail.com" target="_blank">ge0ffrey.spam@gmail.com</a>&gt;</span>:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div bgcolor="#FFFFFF" text="#000000"> 1) There&#39;s 2 course
              grained moves out of the box in 6.1.0.CR1:
              pillarChangeMove and pillarSwapMove.<br>
              And in 6.1.0.CR1 they also include subpillars (which is
              important).<br>
               
              <a href="http://docs.jboss.org/drools/release/latest/optaplanner-docs/html_single/index.html#pillarChangeMoveSelector" target="_blank">http://docs.jboss.org/drools/release/latest/optaplanner-docs/html_single/index.html#pillarChangeMoveSelector</a><br>

              Start with trying those.<br>
              <br>
              2) Then look into cartesianProduct selection and mimic
              selection (see docs).<br>
              The &lt;cartesianProductMoveSelector&gt; allows you to
              combine to existing moves into a new one.<br>
              The mimic selection allows you to make sure that those 2
              moves change the same entity (if needed), but a different
              variable of course.<br>
              I am working on nearBySelection for 6.2 to allow it to
              select 2 entities that are somehow &quot;nearBy&quot; to each other
              (for example in the same service etc).<br>
              <br>
              3) If the above don&#39;t help enough, there&#39;s always custom
              moves (see docs): total freedom, but the devil is in the
              details :)
              <div>
                <div><br>
                  <br>
                  <div>On 24-06-14 01:58, DwProd . wrote:<br>
                  </div>
                </div>
              </div>
              <blockquote type="cite">
                <div>
                  <div>
                    <div dir="ltr"><span style="font-family:arial,sans-serif;font-size:13px">Hello

                        there,</span>
                      <div style="font-family:arial,sans-serif;font-size:13px"><br>
                      </div>
                      <div style="font-family:arial,sans-serif;font-size:13px">I&#39;m

                        pretty new to OptaPlanner, and I must say I&#39;m
                        really impressed with the maturity of it all.
                        Great software with a great documentation !</div>
                      <div style="font-family:arial,sans-serif;font-size:13px"><br>
                      </div>
                      <div style="font-family:arial,sans-serif;font-size:13px">I&#39;ve

                        been working on a variation of the Cloud
                        Balancing example, with a few differences, which
                        make it look like the Machine Reassignment
                        problem as well :</div>
                      <div style="font-family:arial,sans-serif;font-size:13px"><br>
                      </div>
                      <div style="font-family:arial,sans-serif;font-size:13px">-
                        Some processes are already placed and are
                        immovable (using a Selection Filter checking a
                        boolean property of the planning entity)</div>
                      <div style="font-family:arial,sans-serif;font-size:13px">-
                        The Computer (the planning variable) is nullable
                        (basically this is Multiple Muti-Dimensional
                        Knapsack problem) which means I added a soft
                        constraint penalty for processes with a null
                        host.</div>
                      <div style="font-family:arial,sans-serif;font-size:13px">-
                        Processes can only be of a few classes (which I
                        called services, a Problem Fact). Processes of a
                        given service type have a certain amount of
                        required cpu and ram.</div>
                      <div style="font-family:arial,sans-serif;font-size:13px"><br>
                      </div>
                      <div style="font-family:arial,sans-serif;font-size:13px">Taking

                        these elements into account, I do get very good
                        results with OptaPlanner. However, the following
                        constraints always put me into a score trap :</div>
                      <div style="font-family:arial,sans-serif;font-size:13px"><br>
                      </div>
                      <div style="font-family:arial,sans-serif;font-size:13px">-
                        For some services, processes work in groups. For
                        instance, if groups are of size 3, having 7
                        processes is not any better than having 6
                        processes. If there were already 2 processes
                        (immovable and placed), I should only add 4
                        processes and not 5, even if there are enough
                        resources. For this constraint, I have tried
                        using a rule (medium constraint) accumulating
                        processes of that service and using the modulo
                        operator with the group size.</div>
                      <div style="font-family:arial,sans-serif;font-size:13px">-
                        Some services are dependant on one another. For
                        instance, I know that if I have n1 groups of
                        processes of the service 1, I require
                        Math.ceil(2.5*n1) groups of processes of the
                        service 2. I have implemented this similarly
                        with a medium constraint...</div>
                      <div style="font-family:arial,sans-serif;font-size:13px"><br>
                      </div>
                      <div style="font-family:arial,sans-serif;font-size:13px">With

                        any (or both) of these constraints, little to no
                        processes of the concerned services are added
                        and I fail to reach a good solution. I have
                        tried benchmarking with several local search
                        methods and various parameters, but all give the
                        same results... </div>
                      <div style="font-family:arial,sans-serif;font-size:13px"><br>
                      </div>
                      <div style="font-family:arial,sans-serif;font-size:13px">I
                        feel like the next logical step would be to used
                        the often mentioned in the documentation &quot;Coarse
                        Grained Moves&quot; but I fail to locate any simple
                        example. The Nurse Rostering example seems to
                        use that technique to some extent but it seems
                        like an overly complicated example, is it not.</div>
                      <div style="font-family:arial,sans-serif;font-size:13px"><br>
                      </div>
                      <div style="font-family:arial,sans-serif;font-size:13px">Thank

                        you very much for reading this far, if you have
                        any question, guideline, or just a trick, I&#39;d be
                        absolutely delighted to hear from you !</div>
                      <div style="font-family:arial,sans-serif;font-size:13px"><br>
                      </div>
                      <div style="font-family:arial,sans-serif;font-size:13px">Cheers,</div>
                      <div style="font-family:arial,sans-serif;font-size:13px"><br>
                      </div>
                      <div style="font-family:arial,sans-serif;font-size:13px">
                        Woody</div>
                    </div>
                    <br>
                    <fieldset></fieldset>
                    <br>
                  </div>
                </div>
                <pre>_______________________________________________
rules-users mailing list
<a href="mailto:rules-users@lists.jboss.org" target="_blank">rules-users@lists.jboss.org</a>
<a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a></pre>
              </blockquote>
              <br>
            </div>
            <br>
            _______________________________________________<br>
            rules-users mailing list<br>
            <a href="mailto:rules-users@lists.jboss.org" target="_blank">rules-users@lists.jboss.org</a><br>
            <a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
          </blockquote>
        </div>
        <br>
      </div>
      <br>
      <fieldset></fieldset>
      <br>
      <pre>_______________________________________________
rules-users mailing list
<a href="mailto:rules-users@lists.jboss.org" target="_blank">rules-users@lists.jboss.org</a>
<a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a></pre>
    </blockquote>
    <br>
  </div></div></div>

<br>_______________________________________________<br>
rules-users mailing list<br>
<a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br></blockquote></div><br></div>