Spaces:
Sleeping
Sleeping
File size: 4,232 Bytes
2e97de3 8fe8e18 2e97de3 8fe8e18 2e97de3 8fe8e18 2e97de3 8fe8e18 2e97de3 8fe8e18 2e97de3 8fe8e18 2e97de3 8fe8e18 2e97de3 8fe8e18 2e97de3 8fe8e18 9413b96 2e97de3 8fe8e18 2e97de3 8fe8e18 2e97de3 8fe8e18 2e97de3 8fe8e18 2e97de3 8fe8e18 2e97de3 8fe8e18 | 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 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | import streamlit as st
import travelling_salesman
import geocoder
import pandas as pd
from st_aggrid import AgGrid, GridOptionsBuilder
import pandas as pd
from enum import Enum
class Language(Enum):
English = 1
Japanese = 2
if 'language' not in st.session_state:
st.session_state['language'] = Language.English
_, col2 = st.columns([5,1])
with col2:
print(st.session_state['language'])
language = st.selectbox("Language" if st.session_state['language'] == Language.English else "言語", ("English", "日本語"))
st.session_state['language'] = Language.English if language == "English" else Language.Japanese
if 'count' not in st.session_state:
st.session_state.count = 2
def increment_counter():
st.session_state.count += 1
def decrement_counter():
st.session_state.count -= 1
source = ["鶴舞公園", "中村公園", "荒子川公園", "久屋大通公園", "愛知公園", "大高緑地", "天白公園", "荒越公園", "池田公園" , "大須公園"]
st.title("Path planning" if st.session_state['language'] == Language.English else "経路検索")
st.write("""
Given target location(s) and vehicle(s), calculates optimum path from depot using OR-tools
""" if st.session_state['language'] == Language.English else """
ターゲットの場所と車両を指定して、OR ツールを使用してデポからの最適なパスを計算
""")
col1, col2, col3 = st.columns([1,1,1])
with col1:
arrival = st.text_input("Depot" if st.session_state['language'] == Language.English else "デポ", value="大須観音駅")
with col2:
numberOfCars = st.number_input("Vehicle(s)" if st.session_state['language'] == Language.English else "台車数", value=1, min_value=1, max_value=5)
with col3:
timeLimit = st.number_input("Calculation Time Limit" if st.session_state['language'] == Language.English else "計算時間", min_value=1, max_value=1000, value=5, step=1)
col3, col4, _ = st.columns([1,1,4])
with col3:
st.button("Decrement" if st.session_state['language'] == Language.English else "加", on_click=decrement_counter)
with col4:
st.button("Increment" if st.session_state['language'] == Language.English else "減", on_click=increment_counter)
col1, col2 = st.columns([1,2])
with col1:
destinations = source[:st.session_state.count]
df = pd.DataFrame(
{
"Target": destinations,
}
)
gb = GridOptionsBuilder.from_dataframe(df)
gb.configure_default_column(editable=True)
aggrid = AgGrid(df,
# height=400,
gridOptions=gb.build(),
fit_columns_on_grid_load=True,
allow_unsafe_jscode=True,
)
with col2:
with st.spinner(text="Generating map..." if st.session_state['language'] == Language.English else "マップ作成中"):
fig = travelling_salesman.visualize_point(tuple(aggrid.data["Target"].to_list()))
if fig is not None:
st.plotly_chart(fig, use_container_width=True)
else:
st.write("No figure" if st.session_state['language'] == Language.English else "無")
search = st.button('Search Route' if st.session_state['language'] == Language.English else "経路検索")
if search:
if geocoder.osm(arrival, timeout=5.0).latlng is None:
st.warning("Depot invalid" if st.session_state['language'] == Language.English else "デポ不明")
elif any(
[
geocoder.osm(arr, timeout=5.0).latlng is None
for arr in df["Target"]
]
):
st.warning("Destination(s) invalid" if st.session_state['language'] == Language.English else "目的地不明")
elif numberOfCars > len( df["Target"]):
st.warning("Vehicle is less than destination!" if st.session_state['language'] == Language.English else "車台数が目的地より多い!")
else:
with st.spinner('Calculating'):
fig = travelling_salesman.create_route(
arrival, df["Target"], numberOfCars, timeLimit=timeLimit
)
if fig is not None:
st.plotly_chart(fig, use_container_width=True)
else:
st.write("No figure" if st.session_state['language'] == Language.English else "無") |