This page contains source code for experimental results in the following paper:

[1] Yucheng Sun, Haifeng Yu, and Ruomu Hou. 2025. Committee Selection with Non-Proportional Weights. In CCS.

The source code is available here. The remainder of this page provides step-by-step instructions on how to reproduce all our experimental results.

Input Data

All input data (stake distributions) that we use are stored in the subdirectory ./data/.

How to generate the results in Figure 2, 3, and 5 in [1]

The source code to regenerate results in Figure 2, 3, and 5 in [1] is in the subdirectory ./figure235/.

For Figure 2, one can obtain the error of the 2 example committee selection schemes \(\mathsf{Prop}\) and \(\mathsf{NProp}\) by running:

python3 f235.py two_scheme

For Figure 3, one can obtain the error of TPL schemes by running

python3 f235.py tpl

For Figure 5, one can obtain results on how the error of TPL schemes changes with \(\beta\), by running

python3 f235.py beta

How to generate the results in Figure 6 and 7 in [1]

The source code for the results presented in Figure 6 and 7 in [1] is in the subdirectory ./figure67/.

For Figure 6, one can generate the error of our TPL scheme under different stake distributions (with \(f=\frac{1}{5}\) and \(t=\frac{1}{3}\) by running

javac *.java
java Algorithm1 figure6

For Figure 7, one can generate the error of our TPL scheme under Ethereum stake distribution (with various \(f\) and \(t\) values) by running

javac *.java
java Algorithm1 figure7

Output format of Algorithm1

After Algorithm1 finishes, one can see its output in the output directory with the following example format:

200 3.526483e-38 3.732795e-14 0.001004 0.001320 120 148 0.500122 0.597315 0.564538

This means with committee size \(m=200\), the error of the TPL scheme that we found is \(3.526483\cdot 10^{-38}\). The internal parameters are \(h=0.001004\), \(k=120\), and \(\beta=0.500122\). In this example, the stake distribution \(\mathbb{S}\) used is Ethereum, and \(f=\frac{1}{5}\), \(t=1/3\), under public randomness.

How to generate the results beyond Figure 6 and 7 in [1]

In [1], we say "Besides the Ethereum distribution, using the stake distributions of the 5 other cryptocurrencies, we have also similarly experimented with various \(f\) and \(t\) values. The findings there are similar, and due to space constraints, we do not separately plot those.". To generate these results, one can run

javac *.java
java Algorithm1 other_settings