Skip to content

Instantly share code, notes, and snippets.

@JonasHeylen
Last active February 10, 2016 14:40
Show Gist options
  • Save JonasHeylen/babc8f75061b530146ff to your computer and use it in GitHub Desktop.
Save JonasHeylen/babc8f75061b530146ff to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Define the graph:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"nodes = ['a', 'b', 'c']\n",
"edges = [('a', 'b', 2), ('b', 'c', 1/2)]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create system of equations:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 2. , -1. , 0. ],\n",
" [ 0. , 0.5, -1. ],\n",
" [ 1. , 0. , 0. ]])"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A = np.zeros((len(edges) + 1, len(nodes)))\n",
"for e in edges:\n",
" A[nodes.index(e[0]), nodes.index(e[0])] = e[2]\n",
" A[nodes.index(e[0]), nodes.index(e[1])] = -1\n",
"A[len(edges), 0] = 1\n",
"A"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Set initial value:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0],\n",
" [0],\n",
" [1]])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"B = np.array([0, 0, 1]).reshape(3, 1)\n",
"B"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Solve the system:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 1.],\n",
" [ 2.],\n",
" [ 1.]])"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"solution = np.linalg.solve(A, B)\n",
"solution"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Rescale:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[('a', 50.0), ('b', 100.0), ('c', 50.0)]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"list(zip(nodes, np.squeeze(solution * 100 / solution.max())))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "py35",
"language": "",
"name": "py35"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.1"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment