Hello everyone!
Please someone help explain why when I try to generate vertices for more than one floor, I get vertices for one floor and (0,0)vertices for other floors. the aim of this program is to generate vertices for a building with minimized building envelope(i.e the area of the whole building). Attached is the source code created in IBM ILOG CPLEX Optimisation Studio version 12.4
Any help rendered will be highly appreciated.
Thank you.
Topic

Re: Help!! I cannot figure out where the problem is...
20130301T18:13:28ZThis is the accepted answer. This is the accepted answer.Hi,
First, my apologies for getting back to you so lately, and I hope you have solved your problem independently.
I've been running your model with COS12.5 and tried your model with TimeLimit=120 to see what kind of solution you get:
250.7454098705181 1 0 0 0 0 0 0 0 0 250.7454098705181 2 7 13 4 0 0 0 0 0 193.1655047636558 1 0 0 0 0 0 0 0 0 193.1655047636558 2 0 0 4 7 9 3 0 0 191.4177897940998 1 0 0 0 0 0 0 0 0 191.4177897940998 2 0 0 4 8 7 1 0 0 189.8425598373151 1 0 0 0 0 0 0 0 0 189.8425598373151 2 2 0 1 0 3 6 10 4 179.5644436179416 1 0 0 0 0 0 0 0 0 179.5644436179416 2 2 0 10 3 4 6 2 4 168.5311006424702 1 0 0 0 0 0 0 0 0 168.5311006424702 2 5 0 2 3 4 6 10 4 166.4180795051958 1 0 0 0 0 0 0 0 0 166.4180795051958 2 5 0 2 3 4 7 9 4 165.1535019386117 1 0 0 0 0 0 0 0 0 165.1535019386117 2 5 0 2 4 4 7 9 4 163.7964645562817 1 0 0 0 0 0 0 0 0 163.7964645562817 2 5 0 2 4 5 7 9 4
which is normal you don't have set per floor area constraint, so it is normal that some floor may have null area. Your constraint is on the sum of areas. So your model should probably state:
forall(f in Floor) { Area3[f] >= 49 ; Area3[f] <= 70; }
instead of :
Area >= 49 && Area <= 70;
which only constrains the global area. And you need also to replace:
dexpr float Area1[f in Floor] = ((sum(f in Floor, i in aPoints)((x[f][i1]*y[f][i])(x[f][i]*y[f][i1])))); dexpr float Area2[f in Floor] = ((sum(f in Floor)((x[f][numPoints]*y[f][1])(x[f][1]*y[f][numPoints]))));
where expressions won't actually uses the index of the floor since 'f' is redefined in the sum, with:
dexpr float Area1[f in Floor] = ((sum(i in aPoints)((x[f][i1]*y[f][i])(x[f][i]*y[f][i1])))); dexpr float Area2[f in Floor] = ((x[f][numPoints]*y[f][1])(x[f][1]*y[f][numPoints]));
I hope this helps, and sorry again for the late answer.
Cheers, 
Re: Help!! I cannot figure out where the problem is...
20130322T01:11:20ZThis is the accepted answer. This is the accepted answer. rdumeur
 20130301T18:13:28Z
Hi,
First, my apologies for getting back to you so lately, and I hope you have solved your problem independently.
I've been running your model with COS12.5 and tried your model with TimeLimit=120 to see what kind of solution you get:
<pre class="jivepre">250.7454098705181 1 0 0 0 0 0 0 0 0 250.7454098705181 2 7 13 4 0 0 0 0 0 193.1655047636558 1 0 0 0 0 0 0 0 0 193.1655047636558 2 0 0 4 7 9 3 0 0 191.4177897940998 1 0 0 0 0 0 0 0 0 191.4177897940998 2 0 0 4 8 7 1 0 0 189.8425598373151 1 0 0 0 0 0 0 0 0 189.8425598373151 2 2 0 1 0 3 6 10 4 179.5644436179416 1 0 0 0 0 0 0 0 0 179.5644436179416 2 2 0 10 3 4 6 2 4 168.5311006424702 1 0 0 0 0 0 0 0 0 168.5311006424702 2 5 0 2 3 4 6 10 4 166.4180795051958 1 0 0 0 0 0 0 0 0 166.4180795051958 2 5 0 2 3 4 7 9 4 165.1535019386117 1 0 0 0 0 0 0 0 0 165.1535019386117 2 5 0 2 4 4 7 9 4 163.7964645562817 1 0 0 0 0 0 0 0 0 163.7964645562817 2 5 0 2 4 5 7 9 4
</pre>
which is normal you don't have set per floor area constraint, so it is normal that some floor may have null area. Your constraint is on the sum of areas. So your model should probably state:
<pre class="jivepre">forall(f in Floor) { Area3[f] >= 49 ; Area3[f] <= 70; }
</pre>
instead of :
<pre class="jivepre">Area >= 49 && Area <= 70;
</pre>
which only constrains the global area. And you need also to replace:
<pre class="jivepre">dexpr float Area1[f in Floor] = ((sum(f in Floor, i in aPoints)((x[f][i1]*y[f][i])(x[f][i]*y[f][i1])))); dexpr float Area2[f in Floor] = ((sum(f in Floor)((x[f][numPoints]*y[f][1])(x[f][1]*y[f][numPoints]))));
</pre>
where expressions won't actually uses the index of the floor since 'f' is redefined in the sum, with:
<pre class="jivepre">dexpr float Area1[f in Floor] = ((sum(i in aPoints)((x[f][i1]*y[f][i])(x[f][i]*y[f][i1])))); dexpr float Area2[f in Floor] = ((x[f][numPoints]*y[f][1])(x[f][1]*y[f][numPoints]));
</pre>
I hope this helps, and sorry again for the late answer.
Cheers,