Skip to content

Adjust program parameters in real time from the terminal

License

Notifications You must be signed in to change notification settings

stephane-caron/valmix

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Valmix

Build Documentation Coverage PyPI version

Valmix ("value mixer") gives a systematic way to tune Python program parameters from your terminal (similar to alsamixer for Linux users familiar with it). Wrap your parameters in multiprocessing values, pass them to both your program and valmix.run(), and a terminal user interface will appear 🪔 allowing you to modify parameters in real time while your program is running.

Code is shorter than words in Usage below 😉

Installation

From conda-forge

conda install -c conda-forge valmix

From PyPI

pip install valmix

Usage

Suppose you have a Python program with parameters you want to tune:

def main(kp: float, kd: float):
    pass  # your code here

Valmix gives a systematic way to tune these parameters from the command line. First, wrap your parameters in multiprocessing.Values:

import multiprocessing as mp

kp = mp.Value("f", 10.0)
kd = mp.Value("f", 1.0)

Next, update your program to read from the multiprocessing values. For example:

import numpy as np
import time

def main(kp: mp.Value, kd: mp.Value):
    with open("/tmp/output", "w") as output:
        for _ in range(100):
            u = np.clip(kp.value * 1.0 + kd.value * 0.1, 5.0, 20.0)
            output.write(f"{u}\n")
            output.flush()
            time.sleep(1.0)

Finally, run your program and Valmix together, specifying the tuning range for each value:

    # Call the main function in a separate process
    main_process = mp.Process(target=main, args=(kp, kd))
    main_process.start()

    # Display the terminal user interface in this process (blocking call)
    valmix.run(
        {
            "kp": (kp, np.arange(0.0, 20.0, 0.5)),
            "kd": (kd, np.arange(0.0, 10.0, 0.5)),
        }
    )

This will fire up a terminal user interface (TUI) where you can tune kp and kd while the program runs in the background:

image

Useful for instance to tune robot behaviors in real-time 😉

See also

Related software:

  • Textual: terminal user interface (TUI) framework for Python, used to build this tool.

About

Adjust program parameters in real time from the terminal

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Languages