Difference between revisions of "Accessibility Map LOG"

From ESE205 Wiki
Jump to navigation Jump to search
Line 135: Line 135:
 
* Final path exported as GIS waypoints  
 
* Final path exported as GIS waypoints  
  
 +
==Code for Implementation of Dijkstra's Algorithm==
  
 +
class Graph:
 +
  def __init__(self):
 +
    self.nodes = set()
 +
    self.edges = defaultdict(list)
 +
    self.distances = {}
  
 +
  def add_node(self, value):
 +
    self.nodes.add(value)
 +
 +
  def add_edge(self, from_node, to_node, distance):
 +
    self.edges[from_node].append(to_node)
 +
    self.edges[to_node].append(from_node)
 +
    self.distances[(from_node, to_node)] = distance
 +
 +
 +
def dijsktra(graph, initial):
 +
  visited = {initial: 0}
 +
  path = {}
 +
 +
  nodes = set(graph.nodes)
 +
 +
  while nodes:
 +
    min_node = None
 +
    for node in nodes:
 +
      if node in visited:
 +
        if min_node is None:
 +
          min_node = node
 +
        elif visited[node] < visited[min_node]:
 +
          min_node = node
 +
 +
    if min_node is None:
 +
      break
 +
 +
    nodes.remove(min_node)
 +
    current_weight = visited[min_node]
 +
 +
    for edge in graph.edges[min_node]:
 +
      weight = current_weight + graph.distance[(min_node, edge)]
 +
      if edge not in visited or weight < visited[edge]:
 +
        visited[edge] = weight
 +
        path[edge] = min_node
 +
 +
  return visited, path
  
 
[[Accessibility_Map|Link to main project page]]  
 
[[Accessibility_Map|Link to main project page]]  

Revision as of 16:32, 21 March 2018

Week of January 29

Wednesday: group met from 2-4 and discussed challenges of the project. We researched what exactly we will use to build the device as well as worked on the Gantt chart.

Week of February 5

Sunday 2/4: Hannah spent 1 hour downloading and learning more about the Python program.

Goals:

  • What to put into the algorithm
  • Getting GIS to work
  • Getting GIS to work
  • QGIS download
  • Read more info

Download Pycharm + QGIS

Monday 2/5: Hannah spent 1 hour creating powerpoint presentation for class presentation.

Wednesday 2/7: Group met for one hour adding to wiki page and project proposal

Week of February 12

Tuesday 2/13: Wiki page was updated to include TA, Gantt Chart and a longer description of the project. The presentation was also worked on for the class.

Wednesday 2/14: Today we hashed out our GANTT chart, in addition to making additions to our longterm goals. We updated our wiki, and have goals for next week to present our proposal, become adept in python and gather the data of distances.

Wednesday 2/16: Presented project proposal to class.

Week of February 19

Sunday 2/18: Watched multiple python tutorial videos. Most helpful links are below.

https://www.youtube.com/watch?v=N4mEzFDjqtA

https://www.python-course.eu/advanced_topics.php

Wednesday 2/21:

TA meeting discussed short term and long term goals: 1 hour

Week of February 26

Sunday 2/25: Noah created a program in python to figure out distance between two coordinates. It took around 30 minutes.


Hannah completed the python assignment listed below in goals (2.5 hours)

Monday 2/26: Noah created a program that sorts the distances between coordinates in order. It took around 2 hours.


Tuesday 2/27: Hannah, Zahra and Noah met with William Winston, an arGIS specialist on campus. We discussed the best possible programs and have scheduled another meeting for Friday afternoon.


Wednesday 2/28: Group meeting with TA John G and discussed possible new goal. Tentatively stated we would


Creating appropriate network + implementing algorithm then interface


Week of March 5

This week we familiarized ourselves with the WashU arcGIS program along with mapping a part of the campus. We have divided up the each individual parts of the campus to map.

Created a linear network


Zahra completed more python practice (2 hours)

Week of March 12

Zahra met with Bill Winston. He wants us to decide what type of GIS data is needed for python use. (We are using vector data but we may need to use raster data). He continued to explain how to plot points for vector data use.

Week of March 19

New Gantt chart was put into project page


William Winston Notes

Defined data set

BUILDING ENTRY

stairs, foot paths

brad aver back - GIS layout

Upgrade arc gis remote

arcGIS online

Use python to control arcGIS

Python questions: Molly webb

Build linear systems

Heads up digitization

Identify all doorways

Check if windows is running 10.5

Send contact name to update version

Making linear Digitize and create network

Entry ways (pick one closest to elevator)


Current Goals

Python Skills:

Given two points, calculates distance between the two (2d coordinates) : Completed 2/27

Program, given n points, gives distance between all points in sorted order: Completed 2/27


arcGIS :

Be able to load up Python environment and get points from a layer (list of points) : Completed 3/3


Final Product Expectations :

  • topological data for campus paths w/ different weights for different mobilities
  • Shortest path from a to b for different mobilities
  • Final path exported as GIS waypoints

Code for Implementation of Dijkstra's Algorithm

class Graph:

 def __init__(self):
   self.nodes = set()
   self.edges = defaultdict(list)
   self.distances = {}
 def add_node(self, value):
   self.nodes.add(value)
 def add_edge(self, from_node, to_node, distance):
   self.edges[from_node].append(to_node)
   self.edges[to_node].append(from_node)
   self.distances[(from_node, to_node)] = distance


def dijsktra(graph, initial):

 visited = {initial: 0}
 path = {}
 nodes = set(graph.nodes)
 while nodes: 
   min_node = None
   for node in nodes:
     if node in visited:
       if min_node is None:
         min_node = node
       elif visited[node] < visited[min_node]:
         min_node = node
   if min_node is None:
     break
   nodes.remove(min_node)
   current_weight = visited[min_node]
   for edge in graph.edges[min_node]:
     weight = current_weight + graph.distance[(min_node, edge)]
     if edge not in visited or weight < visited[edge]:
       visited[edge] = weight
       path[edge] = min_node
 return visited, path

Link to main project page