In an item assignment project, based on the request from our client, we would like to prioritize some of the items because they are produced under a new set of standards. In other words, we would like to have PROC OPTMODEL work on assigning these new items FIRST when trying to meet all the constraints that have been specified. To us, it sounds like some type of weight thing which assigns a higher probability of selection to newer items. *Weight* is just a terminology that came to us naturally but it may not be the right language in the literature of constrained optimization.
We went through the documentation of PROC OPTMODEL but did not find any information related to this topic: Priortize newer items over older ones when trying to satisfy the constraints. So, we are wondering if this request from our client is really a "legitimate" one under the framework of constrained optimization?
The idea of the new constraint for the second solve is to force the first objective to be as good as in the first solve. See in particular the Objective_cut constraint in this example (but reverse the sense of the inequality since you are maximizing):
http://support.sas.com/documentation/cdl/en/ormpex/68157/HTML/default/viewer.htm#ormpex_ex19_toc.htm
Yes, adjusting the weights (objective coefficients) is a natural approach, but it requires you to come up with the "right" weights as input. An alternative approach is to use multiple objectives. The first objective is to maximize the contribution from the new items. After solving this, you add a constraint on this objective and then maximize the original objective in a second solve. This idea generalizes to an arbitrary number of objectives when you have some ordering on the importance of the objectives.
You can find several examples of this approach by searching for "multiple objectives" in the mathematical programming examples doc:
http://support.sas.com/documentation/cdl/en/ormpex/68157/HTML/default/viewer.htm#titlepage.htm
Hi Rob:
Thank you for your prompt reply. I understand just a little bit the use of multiple objective functions. Based on the information from the documentation, given multiple objective functions, PROC OPTMODEL handles them in a sequential manner unless I combine them into one (say, maximize obj_combo=obj1+obj2+obj3, which I learned from you here at the SAS community. :-)).
After reading the message you posted above, I could think of a case where multiple objective functions could be used:
Step 1: I set up/declare the first objective function OBJ1 to "maximize the contribution from the newer items" followed by the set of constraints.
Step 2: I set up/declare the second objective function OBJ2 to maximize the contribution from the older items followed by the same set of contraints as in Step 1.
Step 3: SOLVE with milp OBJ1; /*To optimize the contribution of newer items first*/
Step 4: SOLVE with milp OBJ2; /*To optimize the contribution of older items second*/
Because PROC OPTMODEL processes the above two SOLVE statements in a sequential manner, I would be able to achieve the goal of assigning newer items first when adhering to one set of constraints and assigning older items second when satisfying the same set of constraints.
I understand I need to read through the mathematical programming book on multiple objectives. But there is one thing in your post I do not quite understand: "After solving this, you add a constraint on this objective...." So, I am not sure what TYPE of constraint would need to be imposed on the first objective function specified for newer items? Using very general terms, what is the goal of the constraint that you suggest should be imposed on the first objective function?
Thank you so much, Rob.
The idea of the new constraint for the second solve is to force the first objective to be as good as in the first solve. See in particular the Objective_cut constraint in this example (but reverse the sense of the inequality since you are maximizing):
http://support.sas.com/documentation/cdl/en/ormpex/68157/HTML/default/viewer.htm#ormpex_ex19_toc.htm
Thank you, Rob. This response of yours clarifies everything. Really helpful!!
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
Learn how to run multiple linear regression models with and without interactions, presented by SAS user Alex Chaplin.
Find more tutorials on the SAS Users YouTube channel.