All random operations should take a seed
Description
As a use case, with small designs, the global placer often crashes. This is meant to be remedied by the PL_RANDOM_INITIAL_PLACEMENT option. However, this produces a random initial placement every time, and can't be locked in. Locking in a randomly found "gold" initial placement would require modifying TCL flows, which goes against the design philosophy of OpenLane. For this reason, OpenLane should accept seeds for all random operations to minimize differences between reruns, if desired. For example, yosys implements this approach, even when arbitrary variable names can influence an outcome of timing, allowing for seeded random scrambling.
Proposal
For purposes of reproducibility, every random operation in OpenLane and tools OpenLane integrates should take a seed as an optional argument