<div dir="auto">How about this approach:<div dir="auto"><br></div><div dir="auto">Working by unions instead of intersections.</div><div dir="auto"><br></div><div dir="auto">For working out the bugs, start with N=20 points randomly sampled from the standard unit cube [0, 1]^3, with sufficiently many digits of precision to avoid ties in what follows.</div><div dir="auto"><br></div><div dir="auto">1.First assume, every point represents both a voter and a candidate.</div><div dir="auto"><br></div><div dir="auto">Find each voter's ranking of all N candidates.  With enough precision and randomness in the random number generator, the rankings will be strict and complete.</div><div dir="auto"><br></div><div dir="auto">N(N-1)/2 pairwise distance calculations, followed by N sorts to find each voter/candidate's preference order.</div><div dir="auto"><br></div><div dir="auto">2. Now suppose we want to consider a subset K of the original set kappa of N candidates. </div><div dir="auto"><br></div><div dir="auto">This can be accomplished by withdrawing the candidates of</div><div dir="auto"> (kappa-K) one by one, adjusting the voter rankings of the remaining candidates, as in any elimination method.</div><div dir="auto"><br></div><div dir="auto">This results in a set of factions distributed among the remaining winners.</div><div dir="auto"><br></div><div dir="auto">3. Find the winners of various methods, etc</div><div dir="auto"><br></div><div dir="auto">4. To get another ballot set, assign different weights to the initial N points, and go back to step 2.</div><div dir="auto"><br></div><div dir="auto">If K is kept the same, the factions will not change, except for their weights.</div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto">Change K from time to time, and eventually go all of the way back to step 1.</div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto"><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">El sáb., 29 de ene. de 2022 3:21 p. m., Kristofer Munsterhjelm <<a href="mailto:km_elmet@t-online.de">km_elmet@t-online.de</a>> escribió:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 29.01.2022 20:35, Daniel Carrera wrote:<br>
> Hi guys,<br>
> <br>
> I like Kristofer's idea of using geometry and volumes to model elections<br>
> with essentially an infinite number of voters. Unfortunately I've never<br>
> really worked with computational geometry in any form, so I'm not really<br>
> familiar with the tools and techniques. I found a software library that<br>
> might have the tools required to implement Kristofer's idea, but I can't<br>
> quite figure out how to make it work.<br>
> <br>
> The scipy.spatial module is a Python front-end for the QHull library. If<br>
> you give it a set of points in N dimensions it will compute the Voronoi<br>
> cells and give you its vertices. You can convert the vertices into a<br>
> convex hull, and it can compute the volume of a convex hull.<br>
<br>
I haven't investigated QHull in detail, but as far as I know convex<br>
polytopes are usually represented (mathematically) in one of two ways:<br>
as a number of vertices (the vertex representation) or as a number of<br>
linear inequalities that all have to be satisfied (the half-space<br>
representation).<br>
<br>
The bad news is that going from one representation to another can be<br>
pretty costly. See <a href="https://mathoverflow.net/a/112441" rel="noreferrer noreferrer" target="_blank">https://mathoverflow.net/a/112441</a>. Then again, so is<br>
determining the volume of a c.p., yet QHull can do that in practice.<br>
<br>
I'm surprised that QHull doesn't support facet enumeration, though.<br>
<br>
The obvious way to do limit Voronoi cells would be to intersect them<br>
with the box that covers the bounds of issue space... but you'd need<br>
intersection functionality to do that, too.<br>
<br>
-km<br>
----<br>
Election-Methods mailing list - see <a href="https://electorama.com/em" rel="noreferrer noreferrer" target="_blank">https://electorama.com/em</a> for list info<br>
</blockquote></div>