No description, website, or topics provided.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
web_files
.gitignore
README.md
Voronoi_boundaries.py
assignment.hpp
build_graph.h
check_weights.cpp
check_weights.hpp
cs2-COPYRIGHT
cs2-README
cs2-VERSION
do_redistrict.cpp
initial_centers.cpp
initial_centers.hpp
main_plot.py
main_script.py
makefile
mincostflow.cpp
mincostflow.hpp
plotGNUPlot.py
plot_regions.py
point.cpp
point.hpp
print_out_solution.cpp
print_out_solution.hpp
rand_float.cpp
rand_float.hpp
rand_point.cpp
rand_point.hpp
read_census_blocks.py
read_state_shapefile.py
redistrict.cpp
redistrict.hpp
types_cs2.h

README.md

Note that the file code incorporates an adapted version of CS2, Andrew Goldberg and Boris Cherkassky's implementation of a min-cost flow algorithm due to Goldberg. See cs2-COPYRIGHT for the license information, and also see cs2-README.

The rest of the code is subject to the following license: Copyright 2017 Philip N. Klein and Vincent Cohen-Addad

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Extract census blocks and populations python3 read_census_blocks.py <output_filename> where contains shape file specifying census blocks, e.g. abblock010_44_pophu/tabblock2010_44_pophu which can be downloaded from https://www.census.gov/geo/maps-data/data/tiger-data.html (Select Population & Housing Unit Counts -- Blocks, then select a state.)

The output file written has one line per client point. It specifies the x coordinate (longitude), the y coordinate (latitude), and the population assigned to that point. The script selects the point to be the centroid of the census block shape. (WHAT HAPPENS IF THE SHAPE CONSISTS OF MULTIPLE POLYGONS?)

Also, extract the boundary polygons of a state: python3 read_state_shapefile.py where is the two-letter abbreviation for a state, and is the name of a directory (not including suffix) giving shape records for state boundaries, e.g. cb_2016_us_state_500k as downloaded from https://www.census.gov/geo/maps-data/data/cbf/cbf_state.html

Next, compute the clustering using do_redistrict <input_filename> where the first argument is the number of clusters to find, and the input file is in the format of the output of the read_census_blocks.py script. This program sends some text indicating progress to standard err, and, when it terminates, sends the output to standard out. Output format:

. . ... ... . . ...

Standard out should be piped into a file

Next, use python3 main_script.py where is an output of the do_redistricting program, the is an output of the read_state_shapefile.py script and is a gnuplot program. It produces a file that the client points, with colors reflecting the assignment to centers, and the boundaries of the convex polygons that form the power diagram of the chosen centers.

Next, use gnuplot to obtain a pdf file consisting of the redistricting of the region, where is the output of the main_script script.

Other tools:

Function power_cells_fromfile(filename) takes as input an output a file in the format of the output of do_redistrict and returns the list of polygons forming the cells of the Voronoi diagram induced by the centers.

Similarly, Function power_cells(C_3D, bbox) takes a set of centers and a bounding box and returns the list of polygons forming the cells of the Voronoi diagram induced by C_3D that fits into the bounding box bb

Function plot_helperVoronoi outputs a file that contains the clients and their assignments and with the polygons output by power_cells. Format of the file output is: to produce a file that specifies: the client points, with colors reflecting the assignment to centers, and the boundaries of the convex polygons that form the power diagram of the chosen centers.

Format:

. . ... ... . . ...

Function plot_helperGNUplot outputs a gnuplot script from given the polygons, the bounding box, the shape of the state (used to clip the polygons to the shape of the state) and displays the clients (a.k.a. census blocks) or not depending on last argument. Running gnuplot on that file shows the client points according to the color assignment, and also the state boundaries, and also the boundaries of the power-diagram cells (clipped against the state boundaries).

Function plot_helperGNUplot_fromfile does the same thing than the plot_helperGNUplot but takes as input a file in the format of the file output by plot_helperVoronoi.