Spaces:
Build error
Build error
eida-h
commited on
Commit
·
4f0beb8
0
Parent(s):
first commit
Browse files- .gitignore +1 -0
- notebook/exp1.ipynb +66 -0
- requirements.txt +4 -0
- simulator/__pycache__/power_storm.cpython-310.pyc +0 -0
- simulator/power_storm.py +22 -0
- streamlit_app.py +49 -0
.gitignore
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
.venv
|
notebook/exp1.ipynb
ADDED
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": null,
|
6 |
+
"metadata": {},
|
7 |
+
"outputs": [
|
8 |
+
{
|
9 |
+
"data": {
|
10 |
+
"image/png": "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m8ja1Z8ohNLT05mi24a4ndsHt3P74bZuH9zO2t7OogQRxYo4f2DD0/rodg+L+CHDwsLa9HuIXxD/GNoet3P74HZuP9zW7YPbWbvb+Vp7VszYdEtERESqx4KFiIiIVI8FyzU4Oztj/vz58n9qO9zO7YPbuf1wW7cPbmfb2c66aLolIiIifeMeFiIiIlI9FixERESkeixYiIiISPVYsBAREZHqsWC5hsWLFyMyMhIuLi6Ii4vD3r17lR6Spvz888+44447ZIqhSCFev359o/tFz/e8efMQHBwMV1dXjBo1CqdOnWq0zoULFzB16lQZVtSxY0fMmjULpaWl7fyTqNeCBQswePBgmfQcEBCA8ePH48SJE43WqaiowGOPPQZfX1906NABEyZMQE5OTqN10tLScNttt8HNzU0+ztNPP42ampp2/mnUbcmSJYiOjraEZ8XHx2PDhg2W+7mdrW/hwoXytePJJ5+03MbtbB0vvvii3LYNLz179lTvdhazhKhpq1atMjo5ORmXL19uPHr0qHH27NnGjh07GnNycpQemmb88MMPxn/84x/Gr776SsxGM65bt67R/QsXLjR6eXkZ169fbzx48KDxzjvvNEZFRRkvXbpkWWfMmDHGmJgY4+7du42//PKLsWvXrsYpU6Yo8NOo0+jRo40ffvih8ciRI8akpCTjrbfeauzUqZOxtLTUss6f//xnY3h4uHHLli3G/fv3G4cOHWocNmyY5f6amhpj3759jaNGjTIeOHBA/t78/PyMc+fOVeinUqdvvvnG+P333xtPnjxpPHHihPG5554zOjo6ym0vcDtb1969e42RkZHG6Oho4xNPPGG5ndvZOubPn2/s06ePMSsry3LJy8tT7XZmwXIVQ4YMMT722GOW67W1tcaQkBDjggULFB2XVv22YKmrqzMGBQUZX3vtNctthYWFRmdnZ+Pnn38urx87dkx+3b59+yzrbNiwwWhnZ2fMyMho559AG3Jzc+U22759u2WbijfVNWvWWNZJTk6W6+zatUteFy80BoPBmJ2dbVlnyZIlRk9PT2NlZaUCP4V2eHt7G5ctW8btbGUlJSXGbt26GTdv3my88cYbLQULt7N1CxbxYbApatzOPCR0BVVVVUhISJCHKBqes0hc37Vrl6Jj04vU1FRkZ2c32sbinBLi0Jt5G4v/xWGgQYMGWdYR64vfxZ49exQZt9oVFRXJ/318fOT/4nlcXV3daDuL3b6dOnVqtJ379euHwMBAyzqjR4+WJzw7evRou/8MWlBbW4tVq1ahrKxMHhridrYucShCHGpouD0FbmfrEofgxSH7zp07y0Pv4hCPWrezLk5+2Bby8/PlC1LDX4Qgrh8/flyxcemJKFaEprax+T7xvzgu2pCDg4N8MzavQ43PXC6O9Q8fPhx9+/aVt4nt5OTkJAu/q23npn4P5vvossOHD8sCRRzfF8f1161bh969eyMpKYnb2UpEIZiYmIh9+/b97j4+n61HfDhcsWIFevTogaysLPzzn//EyJEjceTIEVVuZxYsRDr7VCpebHbs2KH0UHRLvLiL4kTsyVq7di0eeOABbN++Xelh6UZ6ejqeeOIJbN68WU52oLYzduxYy7JoJhcFTEREBL744gs5CUJteEjoCvz8/GBvb/+7jmhxPSgoSLFx6Yl5O15tG4v/c3NzG90vOtDFzCH+Hhr7y1/+gu+++w5bt25FWFiY5XaxncQhzsLCwqtu56Z+D+b76DLxqbNr166IjY2VM7RiYmLw1ltvcTtbiTgUIf7mBw4cKPemiosoCN9++225LD7Bczu3DbE3pXv37khJSVHl85kFy1VelMQL0pYtWxrtbhfXxe5gun5RUVHySd1wG4tjn6I3xbyNxf/iD0a8iJn99NNP8nchPg2QaWq4KFbEoQmxbcR2bUg8jx0dHRttZzHtWRyrbridxaGOhsWh+IQrpu6Kwx10ZeK5WFlZye1sJTfffLPcRmIvlvkiethEf4V5mdu5bYi4iNOnT8uYCVU+n63exquzac1ixsqKFSvkbJWHH35YTmtu2BFN1+70F9PdxEU83d544w25fO7cOcu0ZrFNv/76a+OhQ4eM48aNa3Ja84ABA4x79uwx7tixQ84c4LTmyx555BE5NXzbtm2NpieWl5c3mp4opjr/9NNPcnpifHy8vPx2euItt9wip0Zv3LjR6O/vz2mgv/Hss8/K2Vepqany+SquixlrmzZtkvdzO7eNhrOEBG5n63jqqafk64Z4Pv/6669yerKYlixmGqpxO7NguYZ33nlH/sJEHouY5iyyQKj5tm7dKguV314eeOABy9TmF154wRgYGCiLw5tvvlnmWzRUUFAgC5QOHTrI6XIzZ86UhRCZNLV9xUVks5iJAvDRRx+VU3Dd3NyMd911lyxqGjp79qxx7NixRldXV/miJV7MqqurFfiJ1OvBBx80RkREyNcD8cIsnq/mYkXgdm6fgoXb2TomTZpkDA4Ols/n0NBQeT0lJUW129lO/GP9/TZERERE1sMeFiIiIlI9FixERESkeixYiIiISPVYsBAREZHqsWAhIiIi1WPBQkRERKrHgoWIiIhUjwULERERqR4LFiIiIlI9FixERESkeixYiIiISPVYsBARERHU7v8HoVxkwpTjoGcAAAAASUVORK5CYII=",
|
11 |
+
"text/plain": [
|
12 |
+
"<Figure size 640x480 with 1 Axes>"
|
13 |
+
]
|
14 |
+
},
|
15 |
+
"metadata": {},
|
16 |
+
"output_type": "display_data"
|
17 |
+
}
|
18 |
+
],
|
19 |
+
"source": [
|
20 |
+
"import numpy as np\n",
|
21 |
+
"import matplotlib.pyplot as plt\n",
|
22 |
+
"from scipy.stats import binom\n",
|
23 |
+
"\n",
|
24 |
+
"# パラメータ設定\n",
|
25 |
+
"n = 3 # 試行回数\n",
|
26 |
+
"p = 0.5 # 成功確率\n",
|
27 |
+
"damage = 50\n",
|
28 |
+
"\n",
|
29 |
+
"# x軸の値(0 から n までの整数)\n",
|
30 |
+
"x = np.arange(0, n+1)\n",
|
31 |
+
"\n",
|
32 |
+
"\n",
|
33 |
+
"# 二項分布の確率質量関数 (PMF)\n",
|
34 |
+
"y = binom.pmf(x, n, p)\n",
|
35 |
+
"x = x * damage\n",
|
36 |
+
"# プロット\n",
|
37 |
+
"plt.plot(x, y)\n",
|
38 |
+
"\n",
|
39 |
+
"\n",
|
40 |
+
"# グラフ表示\n",
|
41 |
+
"plt.show()"
|
42 |
+
]
|
43 |
+
}
|
44 |
+
],
|
45 |
+
"metadata": {
|
46 |
+
"kernelspec": {
|
47 |
+
"display_name": ".venv",
|
48 |
+
"language": "python",
|
49 |
+
"name": "python3"
|
50 |
+
},
|
51 |
+
"language_info": {
|
52 |
+
"codemirror_mode": {
|
53 |
+
"name": "ipython",
|
54 |
+
"version": 3
|
55 |
+
},
|
56 |
+
"file_extension": ".py",
|
57 |
+
"mimetype": "text/x-python",
|
58 |
+
"name": "python",
|
59 |
+
"nbconvert_exporter": "python",
|
60 |
+
"pygments_lexer": "ipython3",
|
61 |
+
"version": "3.10.13"
|
62 |
+
}
|
63 |
+
},
|
64 |
+
"nbformat": 4,
|
65 |
+
"nbformat_minor": 2
|
66 |
+
}
|
requirements.txt
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
streamlit
|
2 |
+
numpy
|
3 |
+
matplotlib
|
4 |
+
scipy
|
simulator/__pycache__/power_storm.cpython-310.pyc
ADDED
Binary file (1.1 kB). View file
|
|
simulator/power_storm.py
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# to be developed
|
2 |
+
from scipy.stats import binom
|
3 |
+
import numpy as np
|
4 |
+
|
5 |
+
class PowerStorm:
|
6 |
+
def __init__(self, num_energy, coin_probability=0.5, damage_unit=50):
|
7 |
+
self.num_energy = num_energy
|
8 |
+
# self.coin_probability = coin_probability
|
9 |
+
self.damage_unit = damage_unit
|
10 |
+
# x軸の値(0 から n までの整数)
|
11 |
+
self.x_coin = np.arange(0, num_energy+1)
|
12 |
+
# 二項分布の確率質量関数 (PMF)
|
13 |
+
self.y = binom.pmf(self.x_coin, num_energy, coin_probability)
|
14 |
+
self.x_damage = np.arange(0, num_energy+1) * damage_unit
|
15 |
+
self.expected_value = num_energy * coin_probability
|
16 |
+
self.std = np.sqrt(num_energy * coin_probability * (1 - coin_probability))
|
17 |
+
|
18 |
+
def get_damage_in_std(self, num_std=1):
|
19 |
+
index_within_1std = np.where(np.abs(self.x_coin - self.expected_value) <= num_std * self.std)
|
20 |
+
probability = np.sum(self.y[index_within_1std])
|
21 |
+
damages = self.x_damage[index_within_1std]
|
22 |
+
return damages, probability
|
streamlit_app.py
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import numpy as np
|
3 |
+
import matplotlib.pyplot as plt
|
4 |
+
from simulator.power_storm import PowerStorm
|
5 |
+
import pandas as pd
|
6 |
+
|
7 |
+
# アプリのタイトル
|
8 |
+
st.title("セレビィ ダメージ計算(ポケポケ)")
|
9 |
+
|
10 |
+
# 説明文
|
11 |
+
st.markdown("""
|
12 |
+
### 使い方:
|
13 |
+
1. エネルギー数をスライダーで選択
|
14 |
+
2. グラフを確認
|
15 |
+
3. 標準偏差の倍数を選択し、確率とダメージを確認
|
16 |
+
""")
|
17 |
+
|
18 |
+
# 自然数の入力(スライダー)
|
19 |
+
n = st.slider("エネルギー数", min_value=1, max_value=30, value=2, step=1)
|
20 |
+
|
21 |
+
# タイトル
|
22 |
+
st.write("**横軸:** ダメージ | **縦軸:** 確率")
|
23 |
+
|
24 |
+
# シミュレーションの実行
|
25 |
+
ps = PowerStorm(n)
|
26 |
+
|
27 |
+
# 棒グラフの描画
|
28 |
+
x_label = ps.x_damage
|
29 |
+
x = ps.x_coin
|
30 |
+
y = ps.y
|
31 |
+
data = pd.DataFrame({"x": x_label, "y": y}).set_index("x")
|
32 |
+
st.bar_chart(data)
|
33 |
+
|
34 |
+
st.write("**Summary**")
|
35 |
+
num_std = st.slider("標準偏差の倍数", min_value=1, max_value=5, value=1, step=1)
|
36 |
+
# 追加の説明
|
37 |
+
damages, probability = ps.get_damage_in_std(num_std=num_std)
|
38 |
+
|
39 |
+
summary_markdown_table = f"""
|
40 |
+
| | |
|
41 |
+
|-|-|
|
42 |
+
| エネルギー数 | {n} |
|
43 |
+
| 期待値 | {ps.expected_value*ps.damage_unit} |
|
44 |
+
| 標準偏差 | {ps.std*ps.damage_unit} |
|
45 |
+
| {num_std}標準偏差内の確率 | {probability} |
|
46 |
+
| {num_std}標準偏差内のダメージ | {damages[0]} から {damages[-1]} |
|
47 |
+
"""
|
48 |
+
st.markdown(summary_markdown_table)
|
49 |
+
|