Hello All;
After a bit of searching, I am still a bit unsure if I am using SOS1 Correctly. I have a C++ code which will develop a MIP:
X{D,T} // Decicion D in time T
ObjFn
Max:
100 X{0,0} + 90 X{0,1} + 80 X{0,2} + 70 X{0,3} //... etc
Subject to:
//Calling this the "Standard Way"
C0: X{0,0} + X{0,1} + X{0,2} + X{0,3} <= 1
C1: X{1,0} + X{1,1} + X{1,2} + X{1,3} <= 1
C2: X{2,0} + X{2,1} + X{2,2} + X{2,3} <= 1
C3: X{3,0} + X{3,1} + X{3,2} + X{3,3} <= 1
// there are also constraints that make sure that X{0,t} >= X{1,t}, X{1,t} >= X{2,t}, etc...
C4: X{0,0} + X{0,1} + X{0,2} + X{0,3} >= X{1,3}
C5: X{0,0} + X{0,1} + X{0,2} >= X{1,2}
C6: X{0,0} + X{0,1} >= X{1,1}
C7: X{0,0} >= X{1,0}
//etc...
Binaries:
All X{i,j}
C's 0 through 3 tell the MIP that I can only do decision D in one time period. I was having some problems closing the gap when I stumbled across the SOS in the User Guide. It seems to be tailored made for this kind of constraint. However, when I use them I get a worse gap and it is much slower in closing the gap.
I added code to create SOS to replace the above constraints and it looks like the following (this replaces C 03):
id176067: S1 :: X{0,3} : 1 X{0,2} : 2 X{0,1} : 3 X{0,0} : 4
id176068: S1 :: X{1,3} : 1 X{1,2} : 2 X{1,1} : 3 X{1,0} : 4
id176069: S1 :: X{2,3} : 1 X{2,2} : 2 X{2,1} : 3 X{2,0} : 4
Some Things I don't completely understand:

Is my understanding of SOS correct? i.e. will C 0 through 3 be replaced by id17606 7  9 and interpreted the same way

I know using SOS makes X binary, rather than continuous (if it was established that way). should I make X binary when creating the variables? or is it OK if it is linear?

What do the "weightings" mean (or do)? I think if i better understand that I can have CPLEX make more intellegent decsisons

Will CPLEX interpret the decision variables the same way in other constraints regardless of wether I set up SOS or the more "standard" way

Are there any paramertes I could look at to try to speed the solving process?
Thanks in advance