Friday, October 14, 2011

Find Places Near Your Transportation Stop Point

Feel free to try keying in your stop points in latitude and longtitude into my awesome application on the internet! Rather than talking about it. Let me show it! :)

http://nearmyroute.appspot.com/

Monday, October 10, 2011

Google Maps API for Small Businesses

The ability to search for nearby businesses using Google Maps APIs are very interesting. Using Google Places webservices API (one of Google Maps API), you can:

1. search for additional delivery and backhaul opportunities along your delivery routes
2. explore partnership opportunities in delivery and backhaul to share resources and reduce carbon footprint
3. Know who your competitors or complementary businesses are in a particular location
4. Location new store near a certain profile of stores

Explore Google Maps API more at http://code.google.com/apis/maps/documentation/webservices/

Below are the codes I use. What do you think? elegance in simplicity? :)

import socket # for connecting to googlemaps api
import urllib #retrieve web pages
# initialize namelist as adict()
nameslist=dict()
#for each line in the file, pick put the latitudes and longtitudes, print it

fhandopenstorefile=open('storelocationslatlongall.csv')
for line in fhandopenstorefile:
        line=line.rstrip()
        print line
#put latitudes and longtitudes in the http
        http='https://maps.googleapis.com/maps/api/place/search/xml?location='+line+'&radius=805&sensor=false&key=AIzaSyAJzHX3bW7PiB8T5xRlmp1LpBvFtXgChkc'
        print http
#sent it to google and get the xml file
        fhandopenhttp=urllib.urlopen(http)
        for line in fhandopenhttp:
                print line.strip()
fout=open('output.txt','w')
fout.write(str(nameslist))
fout.close()

Tuesday, October 4, 2011

Supply Chain Analytics For Small Businesses

When we have information on the probablity over several factors that may affect a decision, we can use simulation, or probability (decision) trees to find the option with the highest expected profit.

Probability can be used together with variability in information obtained (e.g. forecasts, demand, etc...) to build analytical models? like how many bus seats or hotel rooms can be overbooked to maximize my profit?

In fact, with so much data over the internet, we can now build our own analytical model right? one easy way to start is with google analytics for small businesses
http://www.google.com/analytics/product.html

Read also interesting article at WSJ on  the dearth of expertise in analytics, and its opportunities:
http://online.wsj.com/article/SB10001424052970203405504576602853746798820.html

Be Careful Of Implementing An ERP System

There are many companies who are persuaded by glittering SAP or Oracle advertisements championing their Enterprise Resource Planning (ERP) software. Let me share what I know and some links before our small businesses jumps onto the ERP bandwagon. Even when a company had implemented ERP, can they make better use of the data they have?

Advantages of ERP:
1. Integration of information (Finance, Manufacturing, Inventory, Sales)
2. Visibility of information
3. New functionalities
4. Standardization of data and processes

Disadvantages of ERP:
1. Loss of flexibility and creativity on the ground due to standardized processes
2. Decreases flexibility to react to market
3. Customization is expensive in subsequent upgrades

Success Factors of ERP implementation if:
1. Customer demand is stable
2. Product is standardized
3. Product is of a modular design
4. There are Frequent shipments to customers

Poor Chance of Success with ERP implementation when:
1. Aggregate demand is unstable (>10% pulses in demand)
2. You have long unavoidable leadtimes from suppliers









Further reading:
1. http://www.tech-faq.com/erp.html
2. http://www.cio.com/article/40323/ERP_Definition_and_Solutions

Principles of Responsive Supply Chains for Small Businesses

We have heard of small business are fast and agile. Nowadays, it is not big companies squashing small ones, but the fast leaving the big and slow companies behind.

So what makes a fast, responsive small business. The answer is to have a responsive supply chain. Principles of responsive supply chains are:
1. Lower production lead times (through pre-positioning raw material, or have some one create it in subassemblies, or reserving capacity)
2. Lower transportation lead times (air rather than sea/land/rail)
3. Parallel manufacturing
4. Small lot production
5. Frequent deliveries
6. Close coordination (design, manufacturing, commercial team sitting together)
7.  Good Forecasting (http://fastsupplychain.blogspot.com/2011/09/method-to-quantify-higher-profits-from.html)

Monday, October 3, 2011

Google App Engine For Small Business Supply Chains

We all know technology is terrific enabler for small business supply chains. We can now use google maps to track and trace your salesperson and transportation fleet; share transaction information through googledocs, talk for free on GoogleTalk. Receive related advertisement when you use Gmail, etc...














How about creating your own transportation routing system, customized to your operational needs using Google App Engine?

When you run the code, it will prompt you to enter the name of nodes, press enter and keep on entering name of nodes. When done, you type in “ok”, then the nodes will pair up, you need to key in the distances here. once the distances are keyed, it will dine the shortest distance.

Isn't it an elegan solution? :)

import sys
print 'Content-Type: text/html'
print ''
print '<pre>'
class node:
    label = ''
    # adjacency list of the node
    neighbors = [] # list of nodes
    distances = [] # distances to neighbors
    # for Dijkstra
    prevNode = None
    totalDistance = 0
    # constructor
    def __init__(self, label):
        self.label = label
        self.neighbors = []
        self.distances = []
        self.prevNode = None
        self.totalDistance = 0
# find the shortest paths to all nodes recursively
def dijkstra(node):
    # visit all neighbors and update them if necessary
    while len(node.neighbors) > 0:
        n = node.neighbors.pop(0)
        d = node.distances.pop(0)
        if n.prevNode == None or n.totalDistance > d + node.totalDistance:
            n.prevNode = node
            n.totalDistance = d + node.totalDistance
        dijkstra(n)
# get the shortest path to the given node
def route(endNode):
    node = endNode
    labels = [endNode.label]
    # distances = []
    while node.label != node.prevNode.label:
        # distances.append(node.totalDistance - node.prevNode.totalDistance)
        node = node.prevNode
        labels.append(node.label)
    labels.reverse()
    return labels
    # distances.reverse()
    # return (labels, distances)
       
# create a graph - need user input on places it needs to go to
#1st step to add in node name and coordinates first, then display node name and coordinates when i type ok. then calculate the distances relative to each other, then pair and add in distances.
##a = node('a')
##b = node('b')
##c = node('c')
##d = node('d')
##e = node('e')
##f = node('f')

graph = []
while(True):
    x = raw_input("name of node : ")
    if x=='ok':
        break
    x=node(x)
    graph.append(x)
print "graphs are", graph
prelimedges=[]
for n in graph:
    print n.label
   
    prelimedges.append((n))
print "prelimedges are ", prelimedges
print "first node is ",prelimedges[len(prelimedges)-1]
print "last node is ",prelimedges[0]

edges=[]
##edges.append((prelimedges[0],prelimedges[1]))
##
##print edges
##print len(prelimedges)
start=0
while start<len(prelimedges):
    print start
    count=0
    while count< len(prelimedges):
        print "count is",count
        print "start is",start
        if start==count:
            count=count+1
            print "count now becomes", count
            if count==len(prelimedges):
                break
       
        distance=raw_input("distance between them: ")
        intdistance=int(distance)
        edges.append(((prelimedges[start]),(prelimedges[count]),intdistance))
        count=count+1
        print "after appending to edges, count is", count
        print edges
    start=start+1
print "at the end, the edges are", edges


# create bidirectional edges of the graph
##edges = []
##edges.append((a, b, 14))
##edges.append((a, c, 9))
###edges.append((a, d, 7))
##edges.append((b, c, 2))
#edges.append((b, f, 9))
#edges.append((c, d, 10))
#edges.append((c, e, 11))
#edges.append((d, e, 15))
#edges.append((f, e, 6))
#edges.append((e,g,10))
#print edges
# create adjaceny list of neighbors for each node
for edge in edges:
    edge[0].neighbors.append(edge[1])
    edge[0].distances.append(edge[2])
    edge[1].neighbors.append(edge[0])
    edge[1].distances.append(edge[2])
# print the graph
print 'The graph:'
print
for n in graph:
    print 'Node: ', n.label
    print 'Neighbors:'
    for i in range(len(n.neighbors)):
        print n.neighbors[i].label, n.distances[i]
    print
# find the shortest paths to all neighbors starting w/ the given node
#startNode = a
startNode = graph[0]
print 'Route start node:', startNode.label
startNode.prevNode = startNode
dijkstra(startNode)
##print
##print 'The graph after Dijkstra:'
##print
##for n in graph:
##    print 'Node:', n.label
##    print 'totalDistance:', n.totalDistance
##    print 'prevNode:', n.prevNode.label
##    print
# print the shortest path to the given node
#endNode = c
endNode = graph[len(graph)-1]
print 'Route end node:', endNode.label
print 'Route:', route(endNode)
print 'Total distance:', endNode.totalDistance

Sunday, October 2, 2011

Leveraging Global Resources for Personalization

Push-pull boundary in supply chains is very interesting, especially for small logistics companies further in the supply chain. customization and personalization nearer to the customer requirement reduces overall inventory costs. Professor MS Krishnan at Ross School of Business calls it the personalization from leveraging global resources. Our ubiquitious IPhone allows us to personalize use from apps,and almost everyone to develop their own apps. Build-a-Bear, Google Apps, Facebook, etc.. all allow people all over the world to contribute and users to customize.

So our down-stream logistics companies are doing more value added services like kitting, labeling, testing, quality control, repairs, they are essentially run manufacturing operations right? Can they value add in the increasing world of track and trace requirements, or even create new businesses from it?



Economic Order Quantity and Minimum Order Quantity

We all know about economic order quantity (EOQ), which is a balance of fixed order cost and the cost of holding inventory.One however, may not be able to order exactly the economic order quantity all the time. We know that small changes to EOQ does not affect fixed and holding cost significantly, but holding cost depends on cost of product. Changing the minimum order quantity, or sometimes called order multiples (or other names) can reduce supply chain costs. My team came in 3rd! hurray! :)


http://www.themsj.com/around-ross/spotlight-on-the-tauber-institute-1.2596618


What is even more interesting it, should EOQ be calculated along the supply chain? Can we relate costs, lead time and the push-pull boundary for companies to differentiate themselves?