Commit 12cde804 authored by Gregor Hendel's avatar Gregor Hendel

model data for liu instance

parent e3235815
From xiaowenl@twolf13.ee.washington.edu Mon Aug 7 11:55 PDT 1995
Received: from dizzy.cplex.com (dizzy) by sierra with ESMTP
(1.37.109.16/16.2) id AA057161731; Mon, 7 Aug 1995 11:55:31 -0700
Return-Path: <xiaowenl@twolf13.ee.washington.edu>
Received: from twolf13.ee.washington.edu by dizzy.cplex.com via SMTP (950511.SGI.8.6.12.PATCH526/cplex.950313)
for <ed@cplex.com> id NAA29552; Mon, 7 Aug 1995 13:35:14 -0400
Received: by twolf13.ee.washington.edu
(5.65/UW-NDC Revision: 2.30 ) id AA04565; Mon, 7 Aug 1995 10:33:52 -0700
From: Xiaowen Liu <xiaowenl@twolf13.ee.washington.edu>
Message-Id: <9508071733.AA04565@twolf13.ee.washington.edu>
Subject: questions about MIP
To: ed@sierra
Date: Mon, 7 Aug 1995 10:33:52 -0700 (PDT)
X-Mailer: ELM [version 2.4 PL23]
Mime-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Content-Length: 911
Status: RO
Hi Ed,
I presented my problem using CPLEX two months ago. It never
gives me an optimal result when the integer variables are large.
I think CPLEX ran too fast and didn't try enough branches.
Is there any parameter I can set to let CPLEX run slower?
Right now, I don't care the running time so much, but I
do care about the final result.
The parameters I set in my running experiment is:
1. set mip strategy backtrack 1.0
2. set mip strategy nodeselect 2
3. set mip strategy variableselect 1
The above settings gives me the best result I have got so far.
Unfortunately, they are still not optimal.
I need your help to figure it out. Any suggestions and comments
will be highly appreciated. Thank you.
Xiaowen
-------------
Xiaowen Liu
Electrial Engineering Bldg, Rm #329
University of Washington
Box 352500
Seattle, WA 98195-2500
Email: xiaowenl@twolf13.ee.washington.edu
Tel: (206)685-8678 (O)
From xiaowenl@twolf13.ee.washington.edu Wed Aug 9 11:30 PDT 1995
Received: from twolf13.ee.washington.edu by sierra with SMTP
(1.37.109.16/16.2) id AA105933003; Wed, 9 Aug 1995 11:30:03 -0700
Return-Path: <xiaowenl@twolf13.ee.washington.edu>
Received: by twolf13.ee.washington.edu
(5.65/UW-NDC Revision: 2.30 ) id AA10877; Wed, 9 Aug 1995 11:26:46 -0700
From: Xiaowen Liu <xiaowenl@twolf13.ee.washington.edu>
Message-Id: <9508091826.AA10877@twolf13.ee.washington.edu>
Subject: Re: questions about MIP
To: ed@sierra (Ed Klotz)
Date: Wed, 9 Aug 1995 11:26:45 -0700 (PDT)
Cc: Xiaowenl@twolf13.ee.washington.edu
In-Reply-To: <199508091650.AA102567032@sierra> from "Ed Klotz" at Aug 9, 95 09:50:32 am
X-Mailer: ELM [version 2.4 PL23]
Mime-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Content-Length: 599
Status: RO
Hi Ed,
Thank you very much for your mail.
I slightly changed my formulation. I can get 1360 by setting
backtracking 1
nodeselect 2
variableselect 1
But this is not optimal yet.
I am going to mail you a brief description of my problem formulation
in my next mail. If you have any questions about that, please let me
know. Also, I will send you a new LP format file I have current.
Thank you very much.
Xiaowen
--
Xiaowen Liu
Electrial Engineering Bldg, Rm #329
University of Washington
Box 352500
Seattle, WA 98195-2500
Email: xiaowenl@twolf13.ee.washington.edu
Tel: (206)685-8678 (O)
From xiaowenl@twolf13.ee.washington.edu Wed Aug 9 11:31 PDT 1995
Received: from twolf13.ee.washington.edu by sierra with SMTP
(1.37.109.16/16.2) id AA106013090; Wed, 9 Aug 1995 11:31:30 -0700
Return-Path: <xiaowenl@twolf13.ee.washington.edu>
Received: by twolf13.ee.washington.edu
(5.65/UW-NDC Revision: 2.30 ) id AA10887; Wed, 9 Aug 1995 11:28:13 -0700
From: Xiaowen Liu <xiaowenl@twolf13.ee.washington.edu>
Message-Id: <9508091828.AA10887@twolf13.ee.washington.edu>
Subject: problem formulation
To: eklotz@sierra
Date: Wed, 9 Aug 1995 11:28:13 -0700 (PDT)
Cc: xiaowenl@twolf13.ee.washington.edu (Xiaowen Liu)
X-Mailer: ELM [version 2.4 PL23]
Mime-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Content-Length: 3598
Status: RO
Hi Ed,
The following is a brief description of my problem formulation.
I am working on the floorplan and placement problem in the
physical design of VLSI circuits. The floorplan and placement
is to place a set of rectangular modules(or blocks) on a chip.
we know the initial topology of the modules, and want to locally
swap the modules and/or orientate the modules such that the total
area of the chip is minimized and there is no overlaps between
between any two modules.
We are trying to use Integer Programming to optimize the area.
The problem formulation is described in the following.
To prevent overlapping of modules i and j, it is required that
at least one of the following linear inequalities holds:
Xi + Wi <= Xj; /* i is to the left of j */
Xi - Wj >= Xj; /* i is to the right of j */
Yi + Hi <= Yj; /* i is below j */
Yi - Hj >= Yj; /* i is abover j */ (1)
where Xi, Yi, Xj, Yj is the continuous variables denote the position
of the lower left corners of the modules i and j with respect to the
center of coordinates. Wi, Hi is the width and height of module i,
which is known values.
In order to ensure that at least on of above inequalities always holds
we introduce two 0-1 integer variables XXiXj and YYiYj, now we consider
the following system of linear inequalities for any pair of modules i and j:
Xi + Wi <= Xj + W * ( XXiXj + YYiYj);
Xi - Wj >= Xj - W * (1 - XXiXj + YYiYj);
Yi + Hi <= Yj + H * (1 + XXiXj - YYiYj);
Yi - Hj >= Yj - H * (2 - XXiXj - YYiYj); (2)
where W = Sum(Wi), H = Sum(Hi).
Assume that X_STAR and Y_STAR are the final width and height of the chip,
we need to optimize the area X_STAR * Y_STAR. If we know the range of the
aspect ratio of X_STAR and Y_STAR to be 0.85 to 1.15, we can linearize the
quadratic problem to a linear problem:
Minimize: 0.495 * X_STAR + 0.5014 * Y_STAR
The additional constraints are:
Xi >= 0, Yi >= 0,
X_STAR >= Xi + Wi,
Y_STAR >= Yi + Hi, for all modules. (3)
The above is the first formulation of our problem. In order to achieve
better floorplan, we allow the rotation of the blocks by introduce another
0-1 integer variable Zi, where Zi = 0 when i block is placed in its initial
orientation and Zi = 1 when block i is rotated 90 degree. The constraints (1)
is rewritten in the following form:
Xi + Zi*Hi + (1-Zi)*Wi <= Xj + M*(XXiXj + YYiYj);
Xi - Zj*Hj - (1-Zj)*Wj >= Xj - M*(1 - XXiYj + YYiYj);
Yi + Zi*Wi + (1-Zi)*Hi <= Yj + M(1 + XXiXj - YYiYj);
Yi - Zj*Wj - (1-Zj)*Hj >= Yj - M(2 - XXiYj - YYiYj); (4)
and the constraints (3) is rewritten as:
Xi >= 0, Yi >= 0,
Xi + (1 - Zi)*Wi + Zi*Hi <= X_STAR,
Yi + Zi*Wi + (1 - Zi)*Hi <= Y_STAR, for all modules (5)
Because we have the initial topology of the modules, we only allow the
local modules to swap. So to local module pairs they have constraints (4),
where there are two integer variables to ensure nonoverlapping.
To the modules are very far away, their topology is fixed, which means these
pairs of modules need only one of inequalities of (1) to guarantee the non-
overlapping.
To this problem formulation, I tried to come up a priority order of the integer
variables. Because the position of a module if more important than the orientation
of a module, I set all the XXiXj and YYiYj variables priority 5 and all Zi variables
to the default value. But from the experiments I have done, I can't see any
improvement.
Xiaowen
--
Xiaowen Liu
Electrial Engineering Bldg, Rm #329
University of Washington
Box 352500
Seattle, WA 98195-2500
Email: xiaowenl@twolf13.ee.washington.edu
Tel: (206)685-8678 (O)
nbRects = 33;
bigM = 8398;
//bigM = 1200; // based on easily obtained feasible solution
// with objective 1200
width = [118,356,132,560,132,314,182,132,84,182,182,370,118,118,118,118,
160,294,196,140,140,174,118,182,160,378,336,126,210,182,132,132,174];
height = [84,118,140,132,314,140,350,294,118,202,202,182,118,126,336,266,
118,118,118,496,406,118,48,118,140,118,132,378,210,98,314,230,132];
// MIP formulation of liu.lp
int nbRects = ...;
int bigM = ...;
range
Rectangles = 1..nbRects;
int width[Rectangles] = ...;
int height[Rectangles] = ...;
int totwidth = sum(i in 1..nbRects) width[i];
int totheight = sum (i in 1..nbRects) height[i];
//int maxlength = totwidth*(totwidth > totheight) +
// totheight*(totheight >= totwidth);
dvar int+ x[Rectangles]; //in 0..maxlength;
dvar int+ y[Rectangles]; //in 0..maxlength;
dvar int+ ystar; // in 0..maxlength; // max (width, height) of resulting rectangle
dvar int rotate[Rectangles] in 0..1;
dvar int XX[Rectangles,Rectangles] in 0..1;
dvar int YY[Rectangles,Rectangles] in 0..1;
minimize
ystar;
subject to {
// Forbid overlap of rectangles while allowing 90 degree rotations.
forall(ordered i, j in Rectangles) {
x[i] + rotate[i]*height[i] + (1 - rotate[i])*width[i] <=
x[j] + bigM * (XX[i,j] + YY[i,j]);
x[j] + rotate[j]*height[j] + (1 - rotate[j])*width[j] <=
x[i] + bigM * (1 + YY[i,j] - XX[i,j]);
y[i] + (1 - rotate[i])*height[i] + rotate[i]*width[i] <=
y[j] + bigM * (1 + XX[i,j] - YY[i,j]);
y[j] + (1 - rotate[j])*height[j] + rotate[j]*width[j] <=
y[i] + bigM * (2 - (XX[i,j] + YY[i,j]));
};
// ystar must satisfy its description (see above).
forall(i in Rectangles) {
ystar >= x[i] + rotate[i]*height[i] + (1 - rotate[i])*width[i];
ystar >= y[i] + rotate[i]*width[i] + (1 - rotate[i])*height[i];
};
};
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment