I am working on a large scale workforce scheduling problem with a large number of hard and soft constraints. The soft constraints are modeled as objectives with penalties for violating them. So my question is regarding choosing the penalty weights. Is there a way we can come up with an optimal set of weights for those objectives (solving it as a multiobjective problem is not an option yet). Right now, the weights are chosen randomly and they range between 0.01 to 1000 and it feels like they are too random.
There is no "optimal" way to weight competing objectives. In some cases, you can ask the decision maker for tradeoffs -- "How much delay would you be willing to incur on this in order to save \$100 on that?" -- and use it to infer weights. That can get difficult when the things being traded are not directly comparable (say, cost v. "fairness"), and it also presumes that tradeoffs are constant regardless of magnitude (if it's worth \$100 to cut my work day from 15 hours to 14 hours then it's worth \$100 to cut it from 6 hours to 5 hours).
If you are willing to solve the problem multiple times, you can pick some weights, solve, show the solution to the decision maker, ask them if they are happy and, if not, what they would be willing to sacrifice to improve something bugging them (in non-numerical terms, just "more of this for less of that"), tweak the weights accordingly, and repeat ad nauseum.