Maybe players should decide where things
should go, but what goes there exactly is decided by the dwarf? As in, when the economy comes in, a dwarf will replace furniture with better furniture if he can afford it, but place it where the old equivalent item was.
Alternatively, we have this furniture-arranging formula.
The way I see it, the formula would need to locate the center of the room, decide on walking-space required/available, decide what furniture the dwarf would WANT in their room, probably based on a preset list with item preferences getting pushed to the top for individual dwarves, and then decide on an arrangement for the furniture based on the dwarf's artistic-ness, sense of efficiency, and neatness.
Efficiency and work ethic combined decide tendency of dwarves to place items near exits, proximity to exit for each item based on ratio of time owned/times used (so that their bed will be closest to the door, then their dresser, then their coffer, and so on).
Artistic-ness and feel for aesthetics combined determine tendency of dwarves to place items in concentric rings, starting at the walls and working inwards, with the most prized item (not most used) taking the center.
Neatness decides the randomisation factor in the algorithm. That is, once the position for all furniture has been set down by the formula, neatness comes along and screws with it, giving a percentage chance of moving each piece of furniture a random amount of urists from its formula-set position, distance moved and chance of moving both determined by neatness score of dwarf.
Of course, in a standard 2*3 room like the dwarves in my fort get, what I mentioned above would probably result in every room just being a horrible jumble of furniture, but still, maybe more intelligence is what the dwarves need.
I don't know which would be better, the formula with the parameters I gave above, or my first paragraph's idea of having furniture only ever get replaced, never rearranged, but I certainly know which the Great Toad would have an easier time coding