Resource Constrained Project Scheduling such that tasks are scheduled based on highest priority












-1















This is regarding a Resource Constrained Project Scheduling Problem (RCPSP). This involves scheduling certain tasks in time windows on machines subject to availability of manpower. This is set up in the form of an Integer Program. I'm using a uniform discrete time representation.



The decision variables are x_it: x_it = 1 if activity i is scheduled to start at a discrete time point t.



Every task has a priority associated with it due to external reasons. To illustrate the goal, consider 3 tasks - p1,p2,p3 with priorities 3,3,4. (two priority levels - 3,4) The requirement is this - if sufficient manpower is available to schedule p1 & p2 or p3 alone, p3 must be chosen even though p1+p2 > p3. I'm looking for a way to implement this logic using decision variables x_it.



I've tried implementing my requirement in the following manner: Assign a new priority (P) to each task: P1 = 3, P2 = 3, P3 = 7; Essentially this involves scaling each priority level such that no combination of lower priority tasks can be higher than this priority level and setting the objective function to "maximize P_i*x_it"



The problem with this approach is that while scaling for a large set of tasks (~300 tasks) and multiple priority levels (20 levels), the new priority values quickly become huge numbers (~10^17).



Is there a more robust way to implement this requirement within the Integer Programming paradigm?










share|improve this question



























    -1















    This is regarding a Resource Constrained Project Scheduling Problem (RCPSP). This involves scheduling certain tasks in time windows on machines subject to availability of manpower. This is set up in the form of an Integer Program. I'm using a uniform discrete time representation.



    The decision variables are x_it: x_it = 1 if activity i is scheduled to start at a discrete time point t.



    Every task has a priority associated with it due to external reasons. To illustrate the goal, consider 3 tasks - p1,p2,p3 with priorities 3,3,4. (two priority levels - 3,4) The requirement is this - if sufficient manpower is available to schedule p1 & p2 or p3 alone, p3 must be chosen even though p1+p2 > p3. I'm looking for a way to implement this logic using decision variables x_it.



    I've tried implementing my requirement in the following manner: Assign a new priority (P) to each task: P1 = 3, P2 = 3, P3 = 7; Essentially this involves scaling each priority level such that no combination of lower priority tasks can be higher than this priority level and setting the objective function to "maximize P_i*x_it"



    The problem with this approach is that while scaling for a large set of tasks (~300 tasks) and multiple priority levels (20 levels), the new priority values quickly become huge numbers (~10^17).



    Is there a more robust way to implement this requirement within the Integer Programming paradigm?










    share|improve this question

























      -1












      -1








      -1








      This is regarding a Resource Constrained Project Scheduling Problem (RCPSP). This involves scheduling certain tasks in time windows on machines subject to availability of manpower. This is set up in the form of an Integer Program. I'm using a uniform discrete time representation.



      The decision variables are x_it: x_it = 1 if activity i is scheduled to start at a discrete time point t.



      Every task has a priority associated with it due to external reasons. To illustrate the goal, consider 3 tasks - p1,p2,p3 with priorities 3,3,4. (two priority levels - 3,4) The requirement is this - if sufficient manpower is available to schedule p1 & p2 or p3 alone, p3 must be chosen even though p1+p2 > p3. I'm looking for a way to implement this logic using decision variables x_it.



      I've tried implementing my requirement in the following manner: Assign a new priority (P) to each task: P1 = 3, P2 = 3, P3 = 7; Essentially this involves scaling each priority level such that no combination of lower priority tasks can be higher than this priority level and setting the objective function to "maximize P_i*x_it"



      The problem with this approach is that while scaling for a large set of tasks (~300 tasks) and multiple priority levels (20 levels), the new priority values quickly become huge numbers (~10^17).



      Is there a more robust way to implement this requirement within the Integer Programming paradigm?










      share|improve this question














      This is regarding a Resource Constrained Project Scheduling Problem (RCPSP). This involves scheduling certain tasks in time windows on machines subject to availability of manpower. This is set up in the form of an Integer Program. I'm using a uniform discrete time representation.



      The decision variables are x_it: x_it = 1 if activity i is scheduled to start at a discrete time point t.



      Every task has a priority associated with it due to external reasons. To illustrate the goal, consider 3 tasks - p1,p2,p3 with priorities 3,3,4. (two priority levels - 3,4) The requirement is this - if sufficient manpower is available to schedule p1 & p2 or p3 alone, p3 must be chosen even though p1+p2 > p3. I'm looking for a way to implement this logic using decision variables x_it.



      I've tried implementing my requirement in the following manner: Assign a new priority (P) to each task: P1 = 3, P2 = 3, P3 = 7; Essentially this involves scaling each priority level such that no combination of lower priority tasks can be higher than this priority level and setting the objective function to "maximize P_i*x_it"



      The problem with this approach is that while scaling for a large set of tasks (~300 tasks) and multiple priority levels (20 levels), the new priority values quickly become huge numbers (~10^17).



      Is there a more robust way to implement this requirement within the Integer Programming paradigm?







      project-planning integer-programming resource-scheduling






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 8 '18 at 13:30









      Ryuu AgamakiRyuu Agamaki

      1




      1
























          1 Answer
          1






          active

          oldest

          votes


















          0














          One way would be:




          1. Solve for jobs with highest priority (say priority 1). Let number of jobs schedule be n1.

          2. Add constraint: scheduled number of jobs with priority 1 = n1

          3. Solve for jobs with priorities 1 and 2. Let number of scheduled jobs with priority 2 be n2.

          4. Add constraint: scheduled number of jobs with priority 2 = n2
            etc






          share|improve this answer

























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53208761%2fresource-constrained-project-scheduling-such-that-tasks-are-scheduled-based-on-h%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            One way would be:




            1. Solve for jobs with highest priority (say priority 1). Let number of jobs schedule be n1.

            2. Add constraint: scheduled number of jobs with priority 1 = n1

            3. Solve for jobs with priorities 1 and 2. Let number of scheduled jobs with priority 2 be n2.

            4. Add constraint: scheduled number of jobs with priority 2 = n2
              etc






            share|improve this answer






























              0














              One way would be:




              1. Solve for jobs with highest priority (say priority 1). Let number of jobs schedule be n1.

              2. Add constraint: scheduled number of jobs with priority 1 = n1

              3. Solve for jobs with priorities 1 and 2. Let number of scheduled jobs with priority 2 be n2.

              4. Add constraint: scheduled number of jobs with priority 2 = n2
                etc






              share|improve this answer




























                0












                0








                0







                One way would be:




                1. Solve for jobs with highest priority (say priority 1). Let number of jobs schedule be n1.

                2. Add constraint: scheduled number of jobs with priority 1 = n1

                3. Solve for jobs with priorities 1 and 2. Let number of scheduled jobs with priority 2 be n2.

                4. Add constraint: scheduled number of jobs with priority 2 = n2
                  etc






                share|improve this answer















                One way would be:




                1. Solve for jobs with highest priority (say priority 1). Let number of jobs schedule be n1.

                2. Add constraint: scheduled number of jobs with priority 1 = n1

                3. Solve for jobs with priorities 1 and 2. Let number of scheduled jobs with priority 2 be n2.

                4. Add constraint: scheduled number of jobs with priority 2 = n2
                  etc







                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited Nov 13 '18 at 13:24

























                answered Nov 13 '18 at 11:56









                Erwin KalvelagenErwin Kalvelagen

                4,8212523




                4,8212523






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53208761%2fresource-constrained-project-scheduling-such-that-tasks-are-scheduled-based-on-h%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    這個網誌中的熱門文章

                    Xamarin.form Move up view when keyboard appear

                    Post-Redirect-Get with Spring WebFlux and Thymeleaf

                    Anylogic : not able to use stopDelay()