I'm going to use Java, the tricky parts will be to build the frequency hopping (for me 410-525MHz) + power lowering (-1-+14/+20dBm) parts so that densely populated areas can function properly.
Largely NodeJS with https://www.npmjs.com/package/serialport but for some of the more ethernet-centric integrations I've been using C++. I haven't gotten to dynamic frequency setups yet, I've actually been lazy and using 2 of these on each side to act as separated TX/RX in different frequency bands. Certainly doesn't scale past a dozen but it made things a lot easier to get started.
I'm curious on your choice of optimization algorithm to balance cell size/interference with relay congestion.
I'm going to use Java, the tricky parts will be to build the frequency hopping (for me 410-525MHz) + power lowering (-1-+14/+20dBm) parts so that densely populated areas can function properly.