title: Multi-project job scheduling in OptaPlanner
body: <p>I am a Java/C/Python developer who is looking to assist a relative who manages a <em>custom</em> product shop.  I am new to optaplanner and contraint programming in general, so my questions are:</p>
  
  <p>1.) Is the scheduling problem below <em>likely</em> solvable in optaplanner (or one of its alternatives)?</p>
  
  <p>2.) What kind of algorithm is best suited for this problem?  It seems like it has a close resemblance to the <a href="http://docs.jboss.org/drools/release/6.0.0.Final/optaplanner-docs/html_single/index.html#projectJobScheduling" rel="nofollow">Project job scheduling</a> example given in the (excellent) OptaPlanner documentation, but it has the additional constraint of scheduling multiple projects at any given time.</p>
  
  <p>The simplified problem is:</p>
  
  <ul>
  <li>At any given time, there are 1 to <em>n</em> projects. </li>
  <li>Each project has its own deadline. </li>
  <li>Each project has a sequenced series of jobs.</li>
  <li>The domain for jobs is limited to <strong>cutting</strong>, <strong>sanding</strong>, and <strong>painting</strong>.</li>
  <li>Any given job can appear 0 to many times in the sequence (i.e. not all projects have an 'cutting' job, but may have multiple 'painting' jobs)</li>
  <li>Each project shares global resources, namely employees <em><strong>A</strong></em>, <em><strong>B</strong></em>, and <em><strong>C</strong></em>.</li>
  <li>Employee <em><strong>A</strong></em> can only perform the <strong>cutting</strong> and <strong>sanding</strong> jobs</li>
  <li>Employee <em><strong>B</strong></em> can only perform the <strong>cutting</strong>, <strong>sanding</strong>, and <strong>painting</strong> jobs</li>
  <li>Employee <em><strong>C</strong></em> can only perform the <strong>sanding</strong> and <strong>painting</strong> jobs</li>
  <li>Solutions only need to be feasible, not optimal</li>
  </ul>