#methods #compute #elections #different #candidacy #seats

electosim

用于计算选举方法(如D'Hondt)和模拟选举的库

1 个不稳定版本

0.1.0 2024年6月21日

模拟 中排名第 127

MIT 许可证

21KB
387

ElectoSIM

codecov


lib.rs:

ElectoSIM

ElectoSIM 是一个库,允许您使用不同的方法模拟简单的选举。

方法

以下方法可用

  • D'Hondt
  • Webster/Sainte-Laguë
  • Adams
  • Imperiali
  • Huntington-Hill
  • 丹麦
  • Hare-Niemeyer
  • Hagenbach-Bischoff
  • Imperiali - Quotient
  • Droop
  • 赢家通吃

使用方法

use electosim::methods::Method;
use electosim::models::Candidacy;

use electosim::SimpleElection;

fn main() {
   let mut election = SimpleElection {
        results: vec![
            Candidacy::new(2010, 9),
            Candidacy::new(1018, 4),
            Candidacy::new(86, 0),
            Candidacy::new(77, 0),
        ],
        seats: 13,
        method: Method::HAGENBASCHBISCHOFF,
   };

    election.compute().expect("Can not compute method");
    election.results.iter().for_each(|c| println!("{:?}", c));
}

main 函数中的第一行创建一个新 [SimpleElection],包含候选人、可用的座位数和要使用的方法。然后调用 compute 方法来计算选举结果。最后,将结果打印到控制台。

compute_ 函数

方法是一个具有以下类型的函数:fn(&mut Vec<T>, u16) -> Result<(), &str> 其中 T 是实现 WithVotesWithSeats 特性的类型。如果您想在不使用 [SimpleElection] 结构的情况下计算选举结果,可以直接使用 compute_ 函数。例如

use electosim::methods::divisor::compute_dhondt;
use electosim::models::Candidacy;

fn main() {
   let mut candidacies = vec![
        Candidacy::new(2010, 0),
        Candidacy::new(1018, 0),
        Candidacy::new(86, 0),
        Candidacy::new(77, 0),
    ];

   compute_dhondt(&mut candidacies, 13).unwrap();

   candidacies.iter().for_each(|c| println!("{:?}", c));
}

methods::divisor (例如:D'hondt)和 methods::remainder (例如:Hare)模块中实现了一些 compute_ 函数。

无运行时依赖