diff --git a/main.py b/main.py
index 796f8296948aaad7e092bb37b2ebdc4a0da779c1..3745b4314849ecd5e0e7b92e1f7ff6bb0c3d8f26 100644
--- a/main.py
+++ b/main.py
@@ -14,6 +14,7 @@ import json
 # User Class Imports.
 from resources import logging as init_logging
 from resources.graph_library import NetworkFlowGraph
+from resources.simplex import Simplex
 
 
 # Initialize Logger.
@@ -241,6 +242,97 @@ def simplex():
     # Create new instance of problem graph.
     graph = create_network_graph()
 
+    # Start by setting all edge weights to 1, to help with simplex initializing logic.
+    for edge in graph.edges.all().values():
+        edge.set_weight(1)
+
+    constraints = []
+    constants = []
+    objective = []
+
+    # Get basic data node and edge structures, so we know it doesn't possibly change at all during iterations.
+    all_graph_nodes = list(graph.nodes.all().values())
+    all_graph_edges = list(graph.edges.all().values())
+
+    # Set objective function.
+    for index in range(len(all_graph_edges)):
+        objective.append(0)
+
+    source_node = graph.nodes.get('s')
+    for edge_connection in source_node.get_edges().values():
+        edge_index = all_graph_edges.index(edge_connection)
+        objective[edge_index] = 1
+
+    # Set max flow capacity constraints for each edge.
+    for edge_index in range(len(all_graph_edges)):
+        # Populate constraint row.
+        constraint_row = []
+        for index in range(len(all_graph_edges)):
+            constraint_row.append(0)
+
+        # Set edge variable value to 1.
+        constraint_row[edge_index] = 1
+        constraints.append(constraint_row)
+
+        # Set constant values. This is the flow capacity itself.
+        edge = all_graph_edges[edge_index]
+        constants.append(edge.get_capacity())
+
+    # Update all nodes to state that "edge flow coming in must be less or equal to edge flow going out."
+    for node in all_graph_nodes:
+        # Check values of all incoming and outgoing edges for node.
+        incoming_edges = node.get_incoming_edges()
+        outgoing_edges = node.get_outgoing_edges()
+
+        # Populate constraint row.
+        constraint_row = []
+        for index in range(len(all_graph_edges)):
+            constraint_row.append(0)
+
+        # Set constraint row values.
+        for incoming_edge in incoming_edges:
+            edge_index = all_graph_edges.index(incoming_edge)
+            constraint_row[edge_index] = incoming_edge.get_weight()
+        constraints.append(constraint_row)
+
+        # Set constant values.
+        total_capacity_out = 0
+        for outgoing_edge in outgoing_edges:
+            total_capacity_out += outgoing_edge.get_capacity()
+        constants.append(total_capacity_out)
+
+    logger.info('obj: {0}'.format(objective))
+    logger.info('constraints: {0}'.format(constraints))
+
+    # # Loop through one last time and create basic variable columns.
+    # for edge_index in range(len(all_graph_edges)):
+    #     for row_index in range(len(constraints)):
+    #         # Check if edge and row index are the same.
+    #         if edge_index == row_index:
+    #             # Set as basic var value.
+    #             constraints[row_index].append(1)
+    #         else:
+    #             # Set as not basic var value.
+    #             constraints[row_index].append(0)
+    #
+    #     objective.append(0)
+
+    # Pass values into simplex and attempt to solve.
+    simplex = Simplex()
+    simplex.set_simplex_values(constraints, constants, objective)
+    simplex.display_tableau()
+    simplex.solve()
+    simplex.display_tableau()
+
+    # Now update graph so we can more visually see the found solution.
+    constants = simplex._vector_b
+    for edge_index in range(len(all_graph_edges)):
+        edge = all_graph_edges[edge_index]
+        edge.set_weight(constants[edge_index])
+
+    # Display graph.
+    graph.display.draw_graph_map(title='Network Flow Solution<Br>Simplex Version')
+
 
 if __name__ == '__main__':
     logger.info('Starting program.')