# Constructing a PWL for Maximization Problem

Hello.

I am trying to maximize a function that involves a negatively impacting term, Q:
Max (A – B – C  .. – Q);

Where, A, B, C .. Q are different terms in the objective function that are dependent on decision variables. x1, x2, … xn (non-negative)I also have the initial positions for the decision variables represented by p1,p2, … pn and constant values c1,c2, … cn.

As per my understanding, whether c is positive or negative I have split the decision variables vector x  into two groups (Positive set and Negative set) and calculated the following:

P = sum(j in Postive set)
mypwl(pj -xj) *cj
N = sum(j in Negative set)
mypwl(pj -xj) *cj

Q is defined as:
Q =  P+N + Switch;

Where, mypwl is a piece-wise function defined as follows:

pwlFunction mypwl=piecewise{0->0; 0->0; 1};

Intuitively, I would like to penalize the positive values under all circumstances, and give preference to negative values or “switch them off” under specific circumstances (e.g. sum of P and N is less than zero)

Here, Switch is a decision variable which can either be zero OR equal to – N, bounded through constraints as follows:
constraint_1 :(P+N >= 0) => (Switch == 0);
constraint_2 :!(P+N >= 0) => (Switch == -N); //(negation constraint)

I am trying to continue to penalize positive values but stop the preference for negative values when N>P (this is achieved through constraint_2).
However, this seems to be an incorrect implementation of the problem I am trying to model. To explain this, let’s go over an example :

If N= -400 and P =200
then
Q = 200 +(-400) + 400 = 200

Increasing the value of P will increase the value of Q until P>N at which point the switch will revert to a value of 0 and Q = 401 -400 =1.
This would incentivize the optimization to target a Q value of 0 rather than letting the expressions A,B, C .. take control of the optimization.
I believe the implementation can be improved by fixing the value of N when P==N, rather than using switch however I am unsure as to how one can achieve this. Please advise on how to achieve this, any alternate solution to achieve the same outcome would also be greatly appreciated.