How can I use MatLab to optimize based on relative rank?





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







1















This is a problem that I have previously addressed in Excel, but would like to move to MatLab for better quality solutions.



Where I work, there is a semiannual process to rank new initiatives. They are scored against a number of criteria and assigned a criteria score in the range [0,1]. Each criteria has a weight assigned to it, and these weight are normalized such that they sum to 1. The total score for a given initiative is then the sum of the products of each criteria score and its weight.



Executing this process generates scores for each initiative under consideration, and the initiatives can thus be ranked 1-n based on their scores. So far so good...



But this list is then provided to a managerial decision body that "applies judgement" and shuffles this ranking based on their own deliberations.



What I would like to do is to investigate whether there is a set of criteria weights that produces a 1-n list closer to the final product of the deliberations. In the past I have done this in Excel, where I can use the rank() function as part of my calculation. I set it up something like this



Excel screenshot



In this case I tell Excel solver to change the values in red, subject to the constraints that they are [0,1] and sum to 1, in order to minimize the sum in green.



The idea is to highlight issues along the lines of "You say criteria X is the most important, but your application of judgement seems to show that Y is actually more of a determinant."



I really don't know how to approach formulating this for fmincon (or any other non-excel solver for that matter) and would appreciate any guidance. My reent experience with Excel has been that a) as the number of initiative increases the runtimes become quite long and b) I can run the same optimization 10 times and get 10 very different solutions...










share|improve this question





























    1















    This is a problem that I have previously addressed in Excel, but would like to move to MatLab for better quality solutions.



    Where I work, there is a semiannual process to rank new initiatives. They are scored against a number of criteria and assigned a criteria score in the range [0,1]. Each criteria has a weight assigned to it, and these weight are normalized such that they sum to 1. The total score for a given initiative is then the sum of the products of each criteria score and its weight.



    Executing this process generates scores for each initiative under consideration, and the initiatives can thus be ranked 1-n based on their scores. So far so good...



    But this list is then provided to a managerial decision body that "applies judgement" and shuffles this ranking based on their own deliberations.



    What I would like to do is to investigate whether there is a set of criteria weights that produces a 1-n list closer to the final product of the deliberations. In the past I have done this in Excel, where I can use the rank() function as part of my calculation. I set it up something like this



    Excel screenshot



    In this case I tell Excel solver to change the values in red, subject to the constraints that they are [0,1] and sum to 1, in order to minimize the sum in green.



    The idea is to highlight issues along the lines of "You say criteria X is the most important, but your application of judgement seems to show that Y is actually more of a determinant."



    I really don't know how to approach formulating this for fmincon (or any other non-excel solver for that matter) and would appreciate any guidance. My reent experience with Excel has been that a) as the number of initiative increases the runtimes become quite long and b) I can run the same optimization 10 times and get 10 very different solutions...










    share|improve this question

























      1












      1








      1








      This is a problem that I have previously addressed in Excel, but would like to move to MatLab for better quality solutions.



      Where I work, there is a semiannual process to rank new initiatives. They are scored against a number of criteria and assigned a criteria score in the range [0,1]. Each criteria has a weight assigned to it, and these weight are normalized such that they sum to 1. The total score for a given initiative is then the sum of the products of each criteria score and its weight.



      Executing this process generates scores for each initiative under consideration, and the initiatives can thus be ranked 1-n based on their scores. So far so good...



      But this list is then provided to a managerial decision body that "applies judgement" and shuffles this ranking based on their own deliberations.



      What I would like to do is to investigate whether there is a set of criteria weights that produces a 1-n list closer to the final product of the deliberations. In the past I have done this in Excel, where I can use the rank() function as part of my calculation. I set it up something like this



      Excel screenshot



      In this case I tell Excel solver to change the values in red, subject to the constraints that they are [0,1] and sum to 1, in order to minimize the sum in green.



      The idea is to highlight issues along the lines of "You say criteria X is the most important, but your application of judgement seems to show that Y is actually more of a determinant."



      I really don't know how to approach formulating this for fmincon (or any other non-excel solver for that matter) and would appreciate any guidance. My reent experience with Excel has been that a) as the number of initiative increases the runtimes become quite long and b) I can run the same optimization 10 times and get 10 very different solutions...










      share|improve this question














      This is a problem that I have previously addressed in Excel, but would like to move to MatLab for better quality solutions.



      Where I work, there is a semiannual process to rank new initiatives. They are scored against a number of criteria and assigned a criteria score in the range [0,1]. Each criteria has a weight assigned to it, and these weight are normalized such that they sum to 1. The total score for a given initiative is then the sum of the products of each criteria score and its weight.



      Executing this process generates scores for each initiative under consideration, and the initiatives can thus be ranked 1-n based on their scores. So far so good...



      But this list is then provided to a managerial decision body that "applies judgement" and shuffles this ranking based on their own deliberations.



      What I would like to do is to investigate whether there is a set of criteria weights that produces a 1-n list closer to the final product of the deliberations. In the past I have done this in Excel, where I can use the rank() function as part of my calculation. I set it up something like this



      Excel screenshot



      In this case I tell Excel solver to change the values in red, subject to the constraints that they are [0,1] and sum to 1, in order to minimize the sum in green.



      The idea is to highlight issues along the lines of "You say criteria X is the most important, but your application of judgement seems to show that Y is actually more of a determinant."



      I really don't know how to approach formulating this for fmincon (or any other non-excel solver for that matter) and would appreciate any guidance. My reent experience with Excel has been that a) as the number of initiative increases the runtimes become quite long and b) I can run the same optimization 10 times and get 10 very different solutions...







      matlab optimize






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Mar 5 at 20:22









      jerHjerH

      1061




      1061






















          0






          active

          oldest

          votes












          Your Answer








          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "3"
          };
          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%2fsuperuser.com%2fquestions%2f1411594%2fhow-can-i-use-matlab-to-optimize-based-on-relative-rank%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Super User!


          • 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%2fsuperuser.com%2fquestions%2f1411594%2fhow-can-i-use-matlab-to-optimize-based-on-relative-rank%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







          Popular posts from this blog

          How do I know what Microsoft account the skydrive app is syncing to?

          When does type information flow backwards in C++?

          Grease: Live!