pysal

This Page

region.randomregion – Random region creation

New in version 1.0.

Generate random regions

Randomly form regions given various types of constraints on cardinality and composition.

class pysal.region.randomregion.Random_Region(area_ids, num_regions=None, cardinality=None, contiguity=None, maxiter=1000)

Randomly combine a given set of areas into two or more regions based on various constraints.

Parameters:

area_ids : list

IDs indexing the areas to be grouped into regions (must be in the same order as spatial weights matrix if this is provided)

num_regions : integer

number of regions to generate (if None then this is chosen randomly from 2 to n where n is the number of areas)

cardinality : list

list containing the number of areas to assign to regions (if num_regions is also provided then len(cardinality) must equal num_regions; if cardinality=None then a list of length num_regions will be generated randomly)

contiguity : W

spatial weights object (if None then contiguity will be ignored)

maxiter : int

maximum number attempts at finding a feasible solution (only affects contiguity constrained regions)

Examples

>>> import random
>>> import numpy as np
>>> nregs = 13
>>> cards = range(2,14) + [10]
>>> w = pysal.weights.lat2W(10,10,rook=False)
>>> ids = w.id_order
>>>
>>> # unconstrained
>>> random.seed(10)
>>> np.random.seed(10)
>>> t0 = Random_Region(ids)
>>> t0.regions[0]
[19, 14, 43, 37, 66, 3, 79, 41, 38, 68, 2, 1, 60]
>>> # cardinality and contiguity constrained (num_regions implied)
>>> random.seed(60)
>>> np.random.seed(60)
>>> t1 = Random_Region(ids, num_regions=nregs, cardinality=cards, contiguity=w)
>>> t1.regions[0]
[7, 18, 29, 17, 38, 48, 19, 28, 39, 37, 47, 36, 57]
>>> # cardinality constrained (num_regions implied)
>>> random.seed(100)
>>> np.random.seed(100)
>>> t2 = Random_Region(ids, num_regions=nregs, cardinality=cards)
>>> t2.regions[0]
[37, 62]
>>> # number of regions and contiguity constrained
>>> random.seed(100)
>>> np.random.seed(100)
>>> t3 = Random_Region(ids, num_regions=nregs, contiguity=w)
>>> t3.regions[1]
[79, 68, 57, 89, 47, 98, 36, 56, 69, 58, 78, 26, 48]
>>> # cardinality and contiguity constrained
>>> random.seed(60)
>>> np.random.seed(60)
>>> t4 = Random_Region(ids, cardinality=cards, contiguity=w)
>>> t4.regions[0]
[7, 18, 29, 17, 38, 48, 19, 28, 39, 37, 47, 36, 57]
>>> # number of regions constrained
>>> random.seed(100)
>>> np.random.seed(100)
>>> t5 = Random_Region(ids, num_regions=nregs)
>>> t5.regions[0]
[37, 62, 26, 41, 35, 25, 36]
>>> # cardinality constrained
>>> random.seed(100)
>>> np.random.seed(100)
>>> t6 = Random_Region(ids, cardinality=cards)
>>> t6.regions[0]
[37, 62]
>>> # contiguity constrained
>>> random.seed(100)
>>> np.random.seed(100)
>>> t7 = Random_Region(ids, contiguity=w)
>>> t7.regions[0]
[37, 27, 38, 29]
>>>

Attributes

feasible boolean if True then solution was found
regions list list of lists of regions (each list has the ids of areas in that region)

Methods

build_contig_regions
build_noncontig_regions
cards2breaks
get_cards
get_num_regions
get_region_breaks
class pysal.region.randomregion.Random_Regions(area_ids, num_regions=None, cardinality=None, contiguity=None, maxiter=100, permutations=99)

Generate a list of Random_Region instances.

Parameters:

area_ids : list

IDs indexing the areas to be grouped into regions (must be in the same order as spatial weights matrix if this is provided)

num_regions : integer

number of regions to generate (if None then this is chosen randomly from 2 to n where n is the number of areas)

cardinality : list

list containing the number of areas to assign to regions (if num_regions is also provided then len(cardinality) must equal num_regions; if cardinality=None then a list of length num_regions will be generated randomly)

contiguity : W

spatial weights object (if None then contiguity will be ignored)

maxiter : int

maximum number attempts (for each permutation) at finding a feasible solution (only affects contiguity constrained regions)

permutations : int

number of Random_Region instances to generate

Examples

>>> import random
>>> import numpy as np
>>> nregs = 13
>>> cards = range(2,14) + [10]
>>> w = pysal.lat2W(10,10,rook=False)
>>> ids = w.id_order
>>>
>>> # unconstrained
>>> random.seed(10)
>>> np.random.seed(10)
>>> t0 = Random_Regions(ids, permutations=2)
>>> t0.solutions[0].regions[0]
[19, 14, 43, 37, 66, 3, 79, 41, 38, 68, 2, 1, 60]
>>> # cardinality and contiguity constrained (num_regions implied)
>>> random.seed(60)
>>> np.random.seed(60)
>>> t1 = Random_Regions(ids, num_regions=nregs, cardinality=cards, contiguity=w, permutations=2)
>>> t1.solutions[0].regions[0]
[7, 18, 29, 17, 38, 48, 19, 28, 39, 37, 47, 36, 57]
>>> # cardinality constrained (num_regions implied)
>>> random.seed(100)
>>> np.random.seed(100)
>>> t2 = Random_Regions(ids, num_regions=nregs, cardinality=cards, permutations=2)
>>> t2.solutions[0].regions[0]
[37, 62]
>>> # number of regions and contiguity constrained
>>> random.seed(100)
>>> np.random.seed(100)
>>> t3 = Random_Regions(ids, num_regions=nregs, contiguity=w, permutations=2)
>>> t3.solutions[0].regions[1]
[79, 68, 57, 89, 47, 98, 36, 56, 69, 58, 78, 26, 48]
>>> # cardinality and contiguity constrained
>>> random.seed(60)
>>> np.random.seed(60)
>>> t4 = Random_Regions(ids, cardinality=cards, contiguity=w, permutations=2)
>>> t4.solutions[0].regions[0]
[7, 18, 29, 17, 38, 48, 19, 28, 39, 37, 47, 36, 57]
>>> # number of regions constrained
>>> random.seed(100)
>>> np.random.seed(100)
>>> t5 = Random_Regions(ids, num_regions=nregs, permutations=2)
>>> t5.solutions[0].regions[0]
[37, 62, 26, 41, 35, 25, 36]
>>> # cardinality constrained
>>> random.seed(100)
>>> np.random.seed(100)
>>> t6 = Random_Regions(ids, cardinality=cards, permutations=2)
>>> t6.solutions[0].regions[0]
[37, 62]
>>> # contiguity constrained
>>> random.seed(100)
>>> np.random.seed(100)
>>> t7 = Random_Regions(ids, contiguity=w, permutations=2)
>>> t7.solutions[0].regions[1]
[62, 63, 54, 71]
>>>

Attributes

solutions list list of length permutations containing all Random_Region instances generated
solutions_feas list list of the Random_Region instances that resulted in feasible solutions