///|
/// Allocate identical-cost servers to fixed Jackson traffic. Routing does
/// not depend on server counts; minimize sum Lq, equivalently external mean
/// response because total service demand is fixed. No live scheduling.
pub fn JacksonNetwork::allocate_servers(
  self : JacksonNetwork,
  minimum : Array[Int],
  maximum : Array[Int],
  budget : Int,
) -> ServerAllocation raise QueueError {
  let traffic = self.solve_traffic()
  if minimum.length() != traffic.length() ||
    maximum.length() != traffic.length() {
    raise Invalid("network allocation bounds must match nodes")
  }
  let nodes = []
  for i in 0.. JacksonNetwork raise QueueError {
  self.validate()
  if counts.length() != self.nodes.length() {
    raise Invalid("server counts must match nodes")
  }
  let nodes = []
  for i in 0.. row.copy()),
  }
}