1. Space Architecture of Patched Bounded Landscape

Charles R Paez Monzon 2020 aNatureTechnologies

"Time exists in order that everything does not happen all at once, and Space exists so that it does not happen to you" - Susan Sontag

#collapse_hide
from __future__ import print_function

# Base Computational Geometry of the Environment in Python
#Set of Fundamental packages  
# scientific packages
import numpy as np
import scipy
import scipy.spatial

# data science packages
import pandas as pd

# visualization packages
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

# animation packages
import ipywidgets as widgets
import moviepy as mpy


from IPython.core.interactiveshell import InteractiveShell
from IPython.display import display
from IPython.display import display_html, display_jpeg, display_png, display_json, display_latex, display_pretty, display_svg
from IPython.display import Image
from matplotlib.patches import Polygon,Arc,Ellipse
from datetime import datetime
from ipywidgets import interact, interactive, fixed, interact_manual

from moviepy.editor import VideoClip
from moviepy.video.io.bindings import mplfig_to_npimage

                                    #from matplotlib import colors
%matplotlib inline
%matplotlib ipympl
%load_ext autoreload
%autoreload 2

%config InlineBackend.figure_format = 'retina'
plt.style.use('fivethirtyeight')
The autoreload extension is already loaded. To reload it, use:
  %reload_ext autoreload

1.1. Gon on-Ball Drives Through the Bounded Landscape

Gon is on control of the ball in an arbitrary $\alpha$ point and is free to go through the bounded landscape creating a sequence of intentional skill actions on his body and on the ball conducting it around with a final destination to an $\omega$ point where he can end up the effective final action to score a goal. Gon will be the creator of a generative process of a Levy flight or effective trajectory. The state of the Gon-ULandscape system is:

  • The set of things is a triple: {goals,ball}
  • The set of agents is a singleton: {Gon}
  • The set of events is: {stasis, transf0, transf1, ..., transfn} =
  • {Ball's positional-stasis, Gon's positional-change,Ball-positional-change, ..., goal}

Gon has to develop his technics for a set of actions or intentional skills to execute on himself and on the ball in the landscape as shown in the animation of YouTube.

Each Gon’s positional change is a movement that can be qualified as {standing, walking, jogging, running} for the velocity and acceleration of Gon’s position from point p to gain point o in bounded space and keep control of the ball.

The cognitive lessons that Gon acquired while he explore and exploit his aFIC knowledge are:

  • the main static reference of aFICS are the goals and,
  • the main dynamic references of aFICS is the ball location and its direction of movement
  • he supplies energy into the system, through his aFIC process, to give the movement direction to his body and to the ball by keeping or breaking symmetry, and
  • the main objective is the effective contralateral action with which Gon scores the goal

In his perception of the events in the landscape he must have these lessons into account; but mainly, the recall of the AcEmFC trainer, that he must:

  • finally conduct the ball in contralateral direction and
  • to execute an end-up effective contralateral action to seeks to score a goal.

Gon needs a geolocational model of the bounded landscape that guides his decision-making at any point in the environment when he is out-off-ball or on-ball control. But, Gon now knows that he has to do an huge effort because all that space-time is created and happen on only himself.

He needs teammates to do it one and again and again in order to have simultaneity and sequentiality of events and that the action be distributed between all agents in the ULandscape.

Now on, Gon knows that:

  • He is constrained to be in the on-ball-control state and that most of the time he will be in the out-off-ball-control state.
  • That he must concentrate on how and where to move
  • When he must be in focus to get control of the ball and,
    • to open spaces where he can receive the ball and take its control or
  • Decides how to play or which is the best action from 1-to-many to decide
    • to keep the symmetry of the direction of movement of the ball on his control or
    • when a clear affordance urges him to break the symmetry of the movement and create a new future changing ball direction

1.2. Architecture of Space of BLandscape

1.2.1. The Patched Bounded Landscape

In aFootball our perspective of the game is in spatial-temporal terms. This view yields us to state that there is an aFICS architecture of the football game in the bounded landscape. This is all about creating open spaces guided by affordances and someone coming into space in coherence with his actions or viceversa.

Therefore, a main idea of strategy to play football in the bounded playground is about organizing space. A spatial practice in geolocalization, adopted in aFICS for football, to be analysed would be in terms of management patchiness in global and local regions to handle the most 'relevant' information in this mesoscale:

  • the static patched bounded landscape or the aPBLandscape and,
  • the teams’ dynamics as Football Flow.

Gon needs a model of the patched bounded landscape that guides his decision-making at any point in the environment when he is off-ball or on-ball control. But, Gon now knows that playing football alone means that all that space-time is created sequentially but all happen on only himself.

This model must take into account all spatial references that Gon has acquiered from exploring the bounded landscape.

  • Gon knows the difference in scale about the near by and the far away
  • Gon knows the difference between the core area, the inner area and the outter area
  • Gon knows which directions of movement of the ball and of his body are in sidewayness or counter-sydewayness.

Let us analyze the patched bounded landscape aBLandscape as the common reference for spatial practice of football.

#collapse_hide

IcHx = 105.0
IcHy = 105.0         # In AcEmFC is 68.0
IcR = np.sqrt(IcHx**2 + IcHy**2)
#IcR
GOAL = 7.32/IcHy*100

ls_col = 'darkseagreen'       # landscape color
uls_col= 'darkseagreen'       # unbounded landscape color
llm_col= 'white'              # landscape line marks edge color
pl_col = 'seagreen'           # patch boundary color

vfl_col = 'gold'            # visual field limits color
sid_col = 'gold'              # space id color


edge = 'blue'
bgcolor = 'yellow'

lw = 1.0
zorder = 1
alpha = 1

# and the cosmic string of rotational symmetry around origin point **o**
origin = [0,0]                # choose origin
# Gon's coordinates
xs = 50.0
ys = 50.0

#collapse_hide

def draw_Blandscape(patchid):
    """sets up unbounded landscape, visually framed by horizon lines
       returns matplotlib fig and axes bjects.
    """
    fig = plt.figure(figsize=(IcHx/12,IcHy/12))   # use 15
    fig.patch.set_facecolor(uls_col)     # set unbounded landscape up

    axes = fig.add_subplot(1, 1, 1)
    
    axes.set_facecolor(ls_col)           # set landscape up

    axes.xaxis.set_visible(True)        # basis vector e1 represents x=0
    axes.yaxis.set_visible(True)        # basis vector e2 represents y=0
    axes.set_xlim(0,100)                 # normalize infinite points in e1 direction
    axes.set_ylim(0,100)                 # normalize infinite points in e2 direction    
    axes.set_axis_off()                  # do not draw spindles - no measurements
    axes = draw_Blpatches(axes,patchid)

    return fig, axes

def draw_Blpatches(axes,patchid):
    
    plt.xlim([-5,105])                   # constrain further FUL e1 direction -5, 105
    plt.ylim([-5,105])                   # constrain further FUL e2 direction -5, 105
    
    axes.scatter(origin[0]+50, origin[1]+50,c='w',s=30)  # origin in the center of half-way line in FUL
                                         # cosmic rotational symmetry line determines inner|wide spaces FUL
    axes.add_patch(Ellipse((50, 50), 2*20/IcHx*100, 2*20/IcHy*100,ec=llm_col,fc='none'))
    axes.add_patch(Ellipse((50, 50), 2*40/IcHx*100, 2*40/IcHy*100,ec=llm_col,fc='none'))
    axes.add_patch(Ellipse((50, 50), 2*55/IcHx*100, 2*55/IcHy*100,ec=llm_col,fc='none'))
    # Ideal Vanished Line or Omnidirectional Horizon in rotational symmetry
    axes.add_patch(Ellipse((50, 50), IcR/IcHx*100, IcR/IcHy*100,ec=llm_col,fc='none'))


                                         # half-way line in UL - visual field limit on shoulders
    axes.add_line(plt.Line2D([50, 50], [0, 100],c=llm_col,lw=1.0))   #50,50.    0,100

                                         # diagonal basis or visual field limit lines that intersects at origin
    axes.add_line(plt.Line2D([0,100],[0,100],c=vfl_col,lw=1.0))   # 0,100.  0,100
    axes.add_line(plt.Line2D([0,100],[100,0],c=vfl_col,lw=1.0))   # 0,100  100,0
                                         # denominations of UL subspaces
    plt.text(45,104,'lateral',fontsize=16, color=sid_col)                              # 45,105
    plt.text(45, -4,'lateral',fontsize=16, color=sid_col)                              # 45, -7
    plt.text(-4,40, 'contralateral',fontsize=16, color=sid_col,rotation='vertical')    #-10,40
    plt.text(104,40,'contralateral',fontsize=16, color=sid_col,rotation='vertical')    #105,40

    
                                         # patch goals in middle of half-e1 and half-e2 horizons
    axes.add_patch(plt.Rectangle(((100), (100-GOAL)/2), 1, GOAL,ec=llm_col,fc='none'))   #100, 100-GOAL
    axes.add_patch(plt.Rectangle((0,   (100-GOAL)/2),  -1, GOAL,ec=llm_col,fc='none')) #0,100-GOAL

#
    nb_patches = 18
    if patchid:
        #half-way line and inner space lane
        axes.add_patch(Ellipse((50, 50), 2*20/IcHx*100, 2*20/IcHy*100,
                                    ec=pl_col, fc='none',lw=1.0))
        axes.add_line(plt.Line2D([50, 50], [100, 0],c=pl_col,lw=1.0))

        #diagonal patch edges in middle space lane
        axes.add_patch(Ellipse((50, 50), 2*40/IcHx*100, 2*40/IcHy*100,
                                    ec=pl_col, fc='none',lw=1.0))
        axes.add_line(plt.Line2D([62.5,76.5],[62.5,76.5],c=pl_col,lw=1.0))
        axes.add_line(plt.Line2D([36.5,22.5],[36.5,22.5],c=pl_col,lw=1.0))

        axes.add_line(plt.Line2D([22.5,36.5],[76.5,63.5],c=pl_col,lw=1.0))
        axes.add_line(plt.Line2D([63.5,76.5],[36.5,22.5],c=pl_col,lw=1.0))

        #wide-space lane
        axes.add_patch(Ellipse((50, 50), 2*52.5/IcHx*100, 2*52.5/IcHy*100,
                                    ec=pl_col, fc='none',lw=1.0))
        axes.add_line(plt.Line2D([2.5,15],[66.7,62.5],c=pl_col,lw=1.0))
        axes.add_line(plt.Line2D([86,97.5],[39.5,35],c=pl_col,lw=1.0))
        axes.add_line(plt.Line2D([2.5,15],[33.6,37.8],c=pl_col,lw=1.0))
        axes.add_line(plt.Line2D([86,97.5],[62.5,66.7],c=pl_col,lw=1.0))

        axes.add_line(plt.Line2D([65,70],[85,96.5],c=pl_col,lw=1.0))
        axes.add_line(plt.Line2D([30,36.5],[2.5,15],c=pl_col,lw=1.0))
        axes.add_line(plt.Line2D([30,35],[96.5,85],c=pl_col,lw=1.0))
        axes.add_line(plt.Line2D([65,70],[15,2.5],c=pl_col,lw=1.0))

#
        # identify patches in our and opponent half-ULandscape fields
        plt.text(92.5,48,'00',fontsize=14, color=sid_col)
        plt.text(2.5,48, '09',fontsize=14, color=sid_col)
        plt.text(80,80,  '01',fontsize=14, color=sid_col)
        plt.text(80,18,  '02',fontsize=14, color=sid_col)
        plt.text(18,80,  '11',fontsize=14, color=sid_col)
        plt.text(18,18,  '10',fontsize=14, color=sid_col)
        plt.text(60,92,  '03',fontsize=14, color=sid_col)
        plt.text(60,8,   '04',fontsize=14, color=sid_col)
        plt.text(40,92,  '13',fontsize=14, color=sid_col)
        plt.text(40,8,   '12',fontsize=14, color=sid_col)

        plt.text(76,48,  '05',fontsize=14, color=sid_col)
        plt.text(20,48,  '14',fontsize=14, color=sid_col)
        plt.text(60,75,  '06',fontsize=14, color=sid_col)
        plt.text(60,25,  '07',fontsize=14, color=sid_col)
        plt.text(40,75,  '16',fontsize=14, color=sid_col)
        plt.text(40,25,  '15',fontsize=14, color=sid_col)

        plt.text(60,48,  '08',fontsize=14, color=sid_col)
        plt.text(40,48,  '17',fontsize=14, color=sid_col)

        plt.text(-4,68,  '19',fontsize=14, color=sid_col) #further goal line space
        plt.text(104,30, '18',fontsize=14, color=sid_col) #further goal line space
        plt.text(60,-4,  '21',fontsize=14, color=sid_col) #further lateral line space
        plt.text(38,104, '20',fontsize=14, color=sid_col) #further lateral line space
    
    return axes
    

#collapse_hide
patchid = True
draw_Blandscape(patchid)
#plt.show()
#plt.savefig('../../APimages/Blandscape.png',dpi=100,bbox_inches="tight",padding=0)    
(<Figure size 630x630 with 1 Axes>,
 <matplotlib.axes._subplots.AxesSubplot at 0x1c42371860>)

Figure 1.1.1. Patched Bounded Landscape aPBLandscape

1.2.2. Spatial Relations of Patches

Patches are circles, semicircular sectors and circunferences subspaces. They exhibit spatial relationships, like n-adjacencies between subspaces and their concatenation as set of subspaces constitute the spatial organization of the aPBLandscape in the aFootball Universe whose inside is bounded by a perimeter as shown in Figure 1.1.1 and 1.1.2.

The perimeter is conformed by a lateral and counter-lateral arcs and the inside by an outter, an inner and a core subspaces as shown in Figures 1.1.3. and 1.1.4.

From this model emerges a zoo of species of organized space. First, the aPBLandscape is organized in two halves, own half and opponent half, each one asociated to a goal object. Each half is sub-organized into nine patches as shown in Figure 1.1.5. In total. Second, the aBLandscape has a perimeter in the proto-aFootball field. There is an inside. When the ball goes through the perimeter we use two code words to identify in which perimeter sublane the game is re-assumed. Patch {18} for contralateral sublane clsl reposition and patch {19} for lateral sublane lsl reposition of game's subchains of in|out-of possession modes and its critical transitions where uncertainty is almost always present. There are eighteen patches with id_code in the range {00..08,09,..,17}. The inner subspace contains the patches subset {05,06,07,08,14,15,16,17} and the outter subspace contains the patches subset {00,01,02,03,04,9,10,11,12,13}.

Table 1.1.1. summarizes the set of spatial relations between patches in the organization of the patched bounded landscape shown in Figure 1.1.6.

#collapse_hide
#The Patch proposal of aNT's Pitch for Football has been adapted at AcEmFC

BL = nx.Graph(name='aFootball')#, patch='a', lane='central', zone='z1', half='us', poss=0,
#             patch_org={0,0}, patch_max={100,100}, bip={'x':50,'y':50})
#it is a twenty_patch_zones_graph indeed

BL.add_node( 0, patch='00',pwU='inside',half='own',subsp='box')
#,zone='z1',poss=0, patch_org=(xmin,ymin),patch_max=(boxEdgeus,boxEdgeLeft),bip={'x':xcb,'y':ycb})
BL.add_node( 1, patch='01',pwU='inside',half='own',subsp='outter')
#,zone='z1',poss=0,patch_org=(xmin,boxEdgeRight),patch_max=(boxEdgeus,ymax), bip={'x':xcc,'y':ycc})
BL.add_node( 2, patch='02',pwU='inside',half='own',subsp='outter')
#,zone='z1',poss=0, patch_org=(boxEdgeus,boxEdgeLeft + gl3),patch_max=(halfwayline,boxEdgeRight - gl3),bip={'x':xcd,'y':ycd})
BL.add_node( 3, patch='03',pwU='inside',half='own',subsp='outter')
#,zone='z1',poss=0, patch_org=(boxEdgeus,boxEdgeLeft),patch_max=(halfwayline,boxEdgeLeft + gl3),bip={'x':xcf,'y':ycf})
BL.add_node( 4, patch='04',pwU='inside',half='own',subsp='outter')
#,zone='z1',poss=0, patch_org=(boxEdgeus,boxEdgeRight - gl3),patch_max=(halfwayline,boxEdgeRight),bip= {'x':xcg,'y':ycg})
                                 
BL.add_node( 5, patch='05',pwU='inside', half='own',subsp='inner')
#,zone='z1',poss=0, patch_org=(boxEdgeus,0),patch_max=(boxEdgeus + bl2us,boxEdgeLeft),bip={'x':xch,'y':ych})
BL.add_node( 6, patch='06',pwU='inside',half='own',subsp='inner')
#,zone='z1',poss=0, patch_org=(boxEdgeus,boxEdgeRight),patch_max=(boxEdgeus + bl2us,ymax), bip={'x':xcj,'y':ycj})
BL.add_node( 7, patch='07',pwU='inside',half='own',subsp='inner')
#,zone='z2',poss=0, patch_org=(boxEdgeus + bl2us,ymin),patch_max=(halfwayline,boxEdgeLeft), bip={'x':xck,'y':yck})
BL.add_node( 8, patch='08',pwU='inside',half='own',subsp='core')
#,zone='z2',poss=0, patch_org=(boxEdgeus + bl2us,boxEdgeRight),patch_max=(halfwayline,ymax), bip={'x':xcl,'y':ycl})

BL.add_node( 9, patch='09',pwU='inside',half='them',subsp='box')
#, zone='z2',poss=0, patch_org=(halfwayline,boxEdgeLeft),patch_max=(boxEdgeop,boxEdgeLeft + gl3),bip={'x':xcn,'y':ycn})
BL.add_node(10, patch='10',pwU='inside',half='them',subsp='outter')
#,zone='z2',poss=0, patch_org=(halfwayline,boxEdgeRight - gl3),patch_max=(boxEdgeop,boxEdgeRight),bip={'x':xcp,'y':ycp})
BL.add_node(11, patch='11',pwU='inside',half='them',subsp='outter')
#,zone='z2',poss=0, patch_org=(halfwayline,xmin),patch_max=(halfwayline + bl2op,boxEdgeLeft),bip={'x':xcq,'y':ycq})
BL.add_node(12, patch='12',pwU='inside',half='them',subsp='outter')
#,zone='z2',poss=0, patch_org=(halfwayline,boxEdgeRight),patch_max=(halfwayline + bl2op,ymax),bip={'x':xcr,'y':ycr})
BL.add_node(13, patch='13',pwU='inside',half='them',subsp='outter')
#,zone='z3',poss=0, patch_org=(halfwayline + bl2op,ymin),patch_max=(boxEdgeop,boxEdgeLeft),bip={'x':xcs, 'y':ycs})
           
BL.add_node(14, patch='14',pwU='inside',half='them',subsp='inner')
#,zone='z3',poss=0, patch_org=(halfwayline + bl2op,boxEdgeRight),patch_max=(boxEdgeop,ymax),bip={'x':xct,'y':yct})
BL.add_node(15, patch='15',pwU='inside',half='them',subsp='inner')
#,zone='z3',poss=0, patch_org=(boxEdgeop,ymin),patch_max=(xmax,boxEdgeLeft),bip={'x':xcv,'y':ycv})
BL.add_node(16, patch='16',pwU='inside',half='them',subsp='inner')
#,zone='z3',poss=0, patch_org=(boxEdgeop,boxEdgeRight),patch_max=(ymax,xmax),bip={'x':xcw,'y':ycw})

BL.add_node(17, patch='17',pwU='inside',half='them',subsp='core')
#, zone='z3',poss=0, patch_org=(boxEdgeop,boxEdgeLeft),patch_max=(xmax,boxEdgeLeft + gl3),bip={'x':xcx,'y':ycx})

BL.add_node( 18, patch='18',pwU ='perimeter',half='both',subsp='cntlateral')
#, zone='perimeter',poss=1,patch_org=(xmin,boxEdgeLeft),patch_max=(boxEdgeus,boxEdgeRight),bip={'x':xca,'y':yca})

BL.add_node(19, patch='19',pwU='perimeter',half='both',subsp='cntlateral')
#,zone='z2',poss=0, patch_org=(halfwayline,boxEdgeLeft + gl3),patch_max=(boxEdgeop,boxEdgeRight - gl3),bip={'x':xcm,'y':ycm})
           
BL.add_node(20, patch='20',pwU ='perimeter',half='both',subsp='lateral')
#, zone='perimeter',poss=1,patch_org=(xmin,boxEdgeLeft),patch_max=(boxEdgeus,boxEdgeRight),bip={'x':xca,'y':yca})

BL.add_node(21, patch='21',pwU ='perimeter',half='both',subsp='lateral')
#, zone='perimeter',poss=1,patch_org=(xmin,boxEdgeLeft),patch_max=(boxEdgeus,boxEdgeRight),bip={'x':xca,'y':yca})

print("aPB-Football Universe: an aPBLandscape with a Perimeter that Close the Interior")
p = CircosPlot(BL, node_labels=True,node_color='pwU')
p.draw()
#plt.savefig("../../APimages/aBlandscape_whole_aFootball")
plt.show()
#BL.node[8]['patch']
aPB-Football Universe: an aPBLandscape with a Perimeter that Close the Interior

Figure 1.1.2. Perimeter and Interior of the Closed aPBLandscape

#collapse_hide
print("The aPB-Football: %d patched zones " % (BL.number_of_nodes()))
print("Nodes: ",list(BL.nodes(data='patch')))
#print("Edges: ",list(BL.nodes(data='lane')))
print("Spaces of aPB-Football", list(BL.nodes(data='pwU')))
print("Half aPB-Field Patches", list(BL.nodes(data='half')))
print("Subspaces of Patches", list(BL.nodes(data='subsp')))
#print("Coordinates limits of patched zones: ",list(BL.nodes(data='patch_org')))
#print(list(BL.nodes(data='patch_max')))
#print("Coordinates of central point of patched zones: ",list(BL.nodes(data='bip')))
The aPB-Football: 22 patched zones 
Nodes:  [(0, '00'), (1, '01'), (2, '02'), (3, '03'), (4, '04'), (5, '05'), (6, '06'), (7, '07'), (8, '08'), (9, '09'), (10, '10'), (11, '11'), (12, '12'), (13, '13'), (14, '14'), (15, '15'), (16, '16'), (17, '17'), (18, '18'), (19, '19'), (20, '20'), (21, '21')]
Spaces of aPB-Football [(0, 'inside'), (1, 'inside'), (2, 'inside'), (3, 'inside'), (4, 'inside'), (5, 'inside'), (6, 'inside'), (7, 'inside'), (8, 'inside'), (9, 'inside'), (10, 'inside'), (11, 'inside'), (12, 'inside'), (13, 'inside'), (14, 'inside'), (15, 'inside'), (16, 'inside'), (17, 'inside'), (18, 'perimeter'), (19, 'perimeter'), (20, 'perimeter'), (21, 'perimeter')]
Half aPB-Field Patches [(0, 'own'), (1, 'own'), (2, 'own'), (3, 'own'), (4, 'own'), (5, 'own'), (6, 'own'), (7, 'own'), (8, 'own'), (9, 'them'), (10, 'them'), (11, 'them'), (12, 'them'), (13, 'them'), (14, 'them'), (15, 'them'), (16, 'them'), (17, 'them'), (18, 'both'), (19, 'both'), (20, 'both'), (21, 'both')]
Subspaces of Patches [(0, 'box'), (1, 'outter'), (2, 'outter'), (3, 'outter'), (4, 'outter'), (5, 'inner'), (6, 'inner'), (7, 'inner'), (8, 'core'), (9, 'box'), (10, 'outter'), (11, 'outter'), (12, 'outter'), (13, 'outter'), (14, 'inner'), (15, 'inner'), (16, 'inner'), (17, 'core'), (18, 'cntlateral'), (19, 'cntlateral'), (20, 'lateral'), (21, 'lateral')]

#collapse_hide
BL.add_edge(0,0)
BL.add_edge(0,1)
BL.add_edge(0,2)
BL.add_edge(0,5)

BL.add_edge(1,1)
BL.add_edge(1,0)
BL.add_edge(1,3)
BL.add_edge(1,5)
BL.add_edge(1,6)

BL.add_edge(2,2)
BL.add_edge(2,0)
BL.add_edge(2,4)
BL.add_edge(2,5)
BL.add_edge(2,7)

BL.add_edge(3,2)
BL.add_edge(3,1)
BL.add_edge(3,6)
BL.add_edge(3,14)
BL.add_edge(3,16)

BL.add_edge(4,4)
BL.add_edge(4,2)
BL.add_edge(4,7)
BL.add_edge(4,12)
BL.add_edge(4,15)

BL.add_edge(5,5)
BL.add_edge(5,0)
BL.add_edge(5,1)
BL.add_edge(5,2)
BL.add_edge(5,6)
BL.add_edge(5,7)
BL.add_edge(5,8)

BL.add_edge(6,6)
BL.add_edge(6,1)
BL.add_edge(6,3)
BL.add_edge(6,5)
BL.add_edge(6,8)
BL.add_edge(6,16)

BL.add_edge(7,7)
BL.add_edge(7,2)
BL.add_edge(7,4)
BL.add_edge(7,5)
BL.add_edge(7,8)
BL.add_edge(7,15)

BL.add_edge(8,8)
BL.add_edge(8,5)
BL.add_edge(8,6)
BL.add_edge(8,7)
BL.add_edge(8,17)

BL.add_edge(9,9)
BL.add_edge(9,10)
BL.add_edge(9,11)
BL.add_edge(9,14)

BL.add_edge(10,10)
BL.add_edge(10,9)
BL.add_edge(10,12)
BL.add_edge(10,14)
BL.add_edge(10,15)

BL.add_edge(11,11)
BL.add_edge(11,9)
BL.add_edge(11,13)
BL.add_edge(11,14)
BL.add_edge(11,16)

BL.add_edge(12,12)
BL.add_edge(12,4)
BL.add_edge(12,7)
BL.add_edge(12,10)
BL.add_edge(12,15)

BL.add_edge(13,13)
BL.add_edge(13,3)
BL.add_edge(13,6)
BL.add_edge(13,11)
BL.add_edge(13,16)

BL.add_edge(14,14)
BL.add_edge(14,9)
BL.add_edge(14,10)
BL.add_edge(14,11)
BL.add_edge(14,15)
BL.add_edge(14,16)
BL.add_edge(14,17)

BL.add_edge(15,15)
BL.add_edge(15,7)
BL.add_edge(15,10)
BL.add_edge(15,12)
BL.add_edge(15,14)
BL.add_edge(15,17)

BL.add_edge(16,16)
BL.add_edge(16,6)
BL.add_edge(16,11)
BL.add_edge(16,13)
BL.add_edge(16,14)
BL.add_edge(16,17)

BL.add_edge(17,17)
BL.add_edge(17,8)
BL.add_edge(17,14)
BL.add_edge(17,15)
BL.add_edge(17,16)

BL.add_edge(18,18)
BL.add_edge(18,0)
BL.add_edge(18,1)
BL.add_edge(18,2)

BL.add_edge(19,19)
BL.add_edge(19,9)
BL.add_edge(19,10)
BL.add_edge(19,11)

BL.add_edge(20,20)
BL.add_edge(20,1)
BL.add_edge(20,3)
BL.add_edge(20,13)
BL.add_edge(20,11)

BL.add_edge(21,21)
BL.add_edge(21,2)
BL.add_edge(21,4)
BL.add_edge(21,12)
BL.add_edge(21,10)

1.2.3. Base State of All Possible Relations Inter-Patched Zones

#collapse_hide
print("aPB-Football with %d possible inter-patched zone interactions" % (BL.number_of_edges()))
print("an aPBLandscape: Perimeter {goal,sideway} 1D-subspaces that Close the Interior with {core,inner,outter} 2D-subspaces")

p = CircosPlot(BL, node_labels=True,node_color='subsp')
p.draw()
#plt.savefig("../../APimages/Circos_aBlandscape_neighborhood")
aPB-Football with 78 possible inter-patched zone interactions
an aPBLandscape: Perimeter {goal,sideway} 1D-subspaces that Close the Interior with {core,inner,outter} 2D-subspaces

Figure 1.1.3. Perimeter {Goals,Sideways} Interior {Core,Inner,Outter} Spaces in aPBLandscape

Table 1.1.1.Spatial Relations in Organized Patched Bounded Landscape

pid wholeU HF subspace 0-neighbor 1-neighbors 2-neighbors 3-neighbors 4-neighbor 5-ne
00 inside own outter {00} {01,02,05} {03,04,06,07,08} {12,13,15,16,17} {10,11,14} {09}
01 inside own outter {01} {00,03,05,06} {02,07,08,13,16,17} {04,11,14,15,17} {09,10,12} {09}
02 inside own outter {02} {00,04,05,07} {01,06,08,12,15,17} {03,10,14,16,18} {09,11,13} {09}
03 inside own outter {03} {01,06,13,16} {00,05,08,11,14,17} {02,07,09,14,15} {04,10} {12}
04 inside own outter {04} {02,07,12,15} {00,05,08,10,14,17} {01,06,09,14,16} {03,11} {13}
05 inside own inner {05} {00,01,02,06,07,08} {03,04,15,16,17} {10,11,12,13,14} {09} {}
06 inside own inner {06} {01,03,05,08,16} {00,02,07,11,13,14,17} {04,09,10,15} {12} {}
07 inside own inner {07} {02,04,05,08,15} {00,01,06,10,12,14,17} {03,09,11,16} {13} {}
08 inside own inner {08} {05,06,07,17} {00,01,02,03,04,14,15,16} {09,10,11,12,13} {} {}
09 inside opp outter {09} {10,11,14} {12,13,15,16,17} {03,04,06,07,08} {01,02,05} {00}
10 inside opp outter {10} {09,12,14,15} {11,16,17,04,07,08} {13,02,05,06,08} {00,01,03} {00}
11 inside opp outter {11} {09,13,14,16} {10,15,17,03,06,08} {10,00,04,06,07} {00,02,04} {00}
12 inside opp outter {12} {10,15,04,07} {09,14,17,02,05,08} {11,16,00,05,06} {13,01} {03}
13 inside opp outter {13} {11,16,03,06} {09,14,17,01,05,08} {10,15,00,05,07} {12,02} {04}
14 inside opp inner {14} {09,10,11,15,16,17} {12,13,06,07,08} {01,02,03,04,05} {00} {}
15 inside opp inner {15} {10,12,14,17,07} {09,11,16,02,04,05,08} {13,00,01,06} {03} {}
16 inside opp inner {16} {11,13,14,17,06} {09,10,15,01,03,05,08} {12,00,02,07} {04} {}
17 inside opp inner {17} {14,15,16,08} {09,10,11,12,13,05,06} {00,01,02,03,04} {} {}
18 perims own periss {} { } { } { } { } {}
19 perims opp periss {} { } { } { } { } {}
20 perims opp periss {} { } { } { } { } {}
21 perims opp periss {} { } { } { } { } {}

Alternative views of the organization of the patched bounded landscape are shown in Figure 1.1.5. for 1-neighborhoods and in Figure 1.1.6. for team halves.

#collapse_hide
print("aPB-Football adjacency shells meso subspaces {Box, Perimeter, Inner, Outter}")
shells = [[5,6,8,16,14,15,17,7],[1,3,13,10,11,12,4,2],[0,9],[18,20,19,21]]

nx.draw_shell(BL, nlist=shells, with_labels=True, node_color='skyblue')
#plt.savefig("../../APimages/aFootball_1Neighborhood")
WARNING:py.warnings:/Users/chazzpm/anaconda3/lib/python3.6/site-packages/networkx/drawing/nx_pylab.py:579: MatplotlibDeprecationWarning: 
The iterable function was deprecated in Matplotlib 3.1 and will be removed in 3.3. Use np.iterable instead.
  if not cb.iterable(width):

aPB-Football adjacency shells meso subspaces {Box, Perimeter, Inner, Outter}

Figure 1.1.4.Space Organization {Box, Inner, Outter, Perimeter} of Interior in aPBLandscape

#collapse_hide
print("aPB-Football adjacency shells meso subspaces {Own, Them, Both}")
shells = [[1,2,3,6,8,5,7,4],[16,15,13,12,10,11,14,17],[0,9],[18,20,19,21]]

nx.draw_shell(BL, nlist=shells, with_labels=True, node_color='skyblue')
#plt.savefig("../../APimages/aFootball_team_half")
aPB-Football adjacency shells meso subspaces {Own, Them, Both}

Figure 1.1.5.Space Organization {Own, Them, Both} Halves of Interior in aPBLandscape

1.3. Space Architecture for aFootball on PB-Landscape

The organization of space reveals the existence of a terrain hierarchy in the patched bounded landscape that invites to responds with tasks propers of an organismic aFootball strategy.

One in which a core-modulus is a positional set up in order to play in the inner subspace and with a larger membrane-modulus positional set up. One in a kind of convex closure of a shape that contains all outter patches. It is the convex hull, a geometric computational concept that emerges from the convex space architecture as complexity of the landscape. An invitation to move and play the ball in this convex hull that currently separates inner and outter subspaces inside the perimeter.

All these relational organizations of space into subspaces and the Figure 1.1.6. that shows the shortest path patch relationships constitute the architecture of space of the patched, bounded landscape PB_Landscape.

#collapse_hide
print(sorted(z for n, z in BL.degree()))
r=dict(sorted(nx.degree(BL)))
#print(sorted(z for n, z in d.values()))
print('(',r.keys(),"\n",r.values(),')')
nx.draw(BL, nodelist=r.keys(), node_size=[v*50 for v in r.values()], with_labels=True, node_color='skyblue')
#plt.savefig("../../APimages/aFootball_Space_Architecture")
plt.show()
[5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9]
( dict_keys([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]) 
 dict_values([6, 8, 9, 7, 7, 8, 8, 8, 6, 6, 8, 8, 7, 7, 9, 8, 8, 6, 5, 5, 6, 6]) )

Figure 1.1.6.Static Space Architecture in Patches of aPBLandscape