Use techniques developed for automatic placement of major building blocks
in a floorplan of integrated circuits, based on "clustering" and "mincut"
to produce a more reasonably laid out initial bubble diagram
in which rooms that belong together are already placed close to one another.
Plan a modular approach, where you start with a simple algorithm that gives some
improvement, and where later you can add more techniques or run more iterations
to obtain even better results.
(This Mini-Project may evolve into a complete course project.)
Add a batch evaluation mode to the floorplan connectivity checker tool that looks at the
whole adjacency matrix.
Smart decisions will have to be made on what it means to check
the various adjacency matrix entries:
(a) Faculty -- Faculty = 2, or
(b) Faculty -- Secretary = 2.
The first one means that faculty want to be close to most or to many of their colleagues;
but the second means that faculty want to be close to the one office that houses
their secretary.
So what is the test to be performed in the symbolic floorplan ?
For (a), perhaps check the maximum of all the shortest paths between any two faculty offices ...
or perhaps do a histogram. For (b) check the distance from each faculty office
to the closest secretarial office, -- but make sure that not all faculty offices
are linked to the same small secretarial office.
Using a heuristic set of numbers for building costs based on square footage, number of stories, total building height, amount of outside walls, size of roof, etc, it should be possible to produce a rough building cost estimate from the symbolic description of the floorplans -- which can be used in the early conceptual design phase to warn architects and clients when their designs get too elaborate or flamboyant. In the Slicer program, which already calculates floor areas for each floor, also calculate additional values for total area of outer walls and for roof areas, plus an overhang "hyper-volume" calculated as the square of the overhang distance times its length times the height of the construction above it. Provide a way to read corresponding weighting factors from a small file or to enter them on the command line, and then display the estimated cost by forming a weighted sum of the various contributions to cost.
Actually, the editing capabilities are so intensly intertwined with Rick's code, that it might be hard to go in there and change things. Thus a better approach is to make a stand-alone filter between Dave Bacher's FSM tool and Rick's BMG. This filter program should clean up the potentially flawed outputs from FSM and also do some of the Boolean operations on rectilinear polygons so that we have the flexibility to make L-shaped rooms and buildings with nested contours of outer walls. This filter would probably snap all vertex coordinates to an integer grid, make sure no two rooms overlap, and that all lie within the contours of outer walls. It would combine adjacent rectangles with identical labels into a single rectilinear contour. It would then subtract all rooms from the floor polygon, break up the remaining floor space into corridor rectangles, and merge them with other user-defined rectangles labelled "corridor_". This collection of good rectilinear contours would then be sent to the BMG.
<-- Back to CS 294-5 HomePage