File size: 3,302 Bytes
5784d50
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3b533eb
5784d50
 
 
 
 
 
0e34b80
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import networkx as nx
import gradio as gr

def find_shortest_path(graph, start, end):
    """
    Find the shortest path in a graph using Dijkstra's algorithm.
    
    Parameters:
    graph (dict): A dictionary representing the graph where keys are node names and values are dictionaries of neighboring nodes and their distances.
    start (str): The starting node.
    end (str): The destination node.
    
    Returns:
    list: The shortest path from start to end.
    float: The total distance of the shortest path.
    """
    G = nx.DiGraph()
    
    # Add edges to the graph
    for node, neighbors in graph.items():
        for neighbor, distance in neighbors.items():
            G.add_edge(node, neighbor, weight=distance)
    
    # Find the shortest path using Dijkstra's algorithm
    shortest_path = nx.dijkstra_path(G, start, end)
    total_distance = nx.dijkstra_path_length(G, start, end)
    
    return shortest_path, total_distance

def combine_maps(city_map, jam_map):
    """
    Combine city map and jam map by adding their weights.
    
    Parameters:
    city_map (dict): A dictionary representing the city map where keys are node names and values are dictionaries of neighboring nodes and their distances.
    jam_map (dict): A dictionary representing the jam map where keys are node names and values are dictionaries of neighboring nodes and their jam factors.
    
    Returns:
    dict: A combined map with summed weights.
    """
    combined_map = {}
    
    for node in city_map:
        combined_map[node] = {}
        for neighbor in city_map[node]:
            combined_map[node][neighbor] = city_map[node][neighbor] + jam_map[node][neighbor]
    
    return combined_map

# Example graph representing the city map
city_map = {
    '重症外傷センター': {'池袋': 2, '中目黒': 5},
    '池袋': {'重症外傷センター': 2, '中目黒': 3, '六本木': 4},
    '中目黒': {'重症外傷センター': 5, '池袋': 3, '六本木': 2, '銀座': 6},
    '六本木': {'池袋': 4, '中目黒': 2, '銀座': 1},
    '銀座': {'中目黒': 6, '六本木': 1}
}

# Example graph representing the jam map
jam_map = {
    '重症外傷センター': {'池袋': 5, '中目黒': 2},
    '池袋': {'重症外傷センター': 5, '中目黒': 4, '六本木': 3},
    '中目黒': {'重症外傷センター': 5, '池袋': 6, '六本木': 3, '銀座': 2},
    '六本木': {'池袋': 1, '中目黒': 3, '銀座': 5},
    '銀座': {'中目黒': 3, '六本木': 4}
}

# Combine city map and jam map
combined_map = combine_maps(city_map, jam_map)

def shortest_path_interface(start_point, destination):
    shortest_path, total_distance = find_shortest_path(combined_map, start_point, destination)
    return f"一番短い{start_point}から{destination}までの経路は: {shortest_path}\nトータルの距離は{total_distance}ユニットです。"

# Create Gradio interface
iface = gr.Interface(
    fn=shortest_path_interface,
    inputs=[gr.Textbox(label="出発地",value="銀座"),gr.Textbox(label="到着地",value="重症外傷センター")],
    outputs="text",
    title="救急搬送ルートの最適化",
    description="出発地点と目的地を入力して、最短経路を計算します。"
)

# Launch the interface
iface.launch()