Here is a copy of my answer to a similar question somewhere else:
- I choose a size of a mansion in "squares". The smallest possible mansion is 4 squares big, the largest is about 200 I guess. When it's too big it stops looking like a a single building, more like a cluster of several ones.
- Then I generate a polyomino of that size. This becomes a ground plan of a mansion. The smallest mansions look like Tetris pieces when viewed from the top.
- Then I split this shape into rectangular "wings". For that I look for the largest rectangle within it, then the next and the next etc. Large wings have more floors, small wings have fewer of them (unless they can be seamlessly attached to large ones). One-square wings become towers.
- At the end I build a 3D model of this stuff.
If you need just a floor plan, than a short summary of this algorithm is "generate a polyomino, split it into rectangles". I hope it helps :)