Skip to content

Commit 85719af

Browse files
committed
feat: custom inputs
1 parent 7427137 commit 85719af

2 files changed

Lines changed: 102 additions & 47 deletions

File tree

index.html

Lines changed: 101 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -6,64 +6,119 @@
66
<link data-trunk rel="rust"/>
77
</head>
88
<body>
9-
<div id="abrams"></div>
10-
<div id="diaz"></div>
9+
<div id="container">
10+
<select id="model">
11+
<option value="abrams">Abrams-Strogatz</option>
12+
<option value="diaz">Diaz-Switkes</option>
13+
</select>
14+
<div id="params">
15+
<div id="abrams">
16+
<label for="x">x</label>
17+
<input type="number" id="x" min="1" max="10000" value="80" />
18+
<label for="y">y</label>
19+
<input type="number" id="y" min="1" max="10000" value="20" />
20+
<label for="c">c</label>
21+
<input type="number" id="c" min="0" max="1" step="0.01" value="0.5" />
22+
<label for="a">a</label>
23+
<input type="number" id="a" min="0" max="10" step="0.01" value="1.35" />
24+
<label for="s">s</label>
25+
<input type="number" id="s" min="0" max="1" step="0.01" value="0.33" />
26+
</div>
27+
<div id="diaz" style="display: none">
28+
<label for="x_1">x<sub>1</sub></label>
29+
<input type="number" id="x_1" min="1" max="10000" value="33" />
30+
<label for="x_2">x<sub>2</sub></label>
31+
<input type="number" id="x_2" min="1" max="10000" value="33" />
32+
<label for="b">b</label>
33+
<input type="number" id="b" min="0" max="10000" value="34" />
34+
<label for="m_1">m<sub>1</sub></label>
35+
<input type="number" id="m_1" min="0" max="1" step="0.01" value="0.4" />
36+
<label for="m_2">m<sub>2</sub></label>
37+
<input type="number" id="m_2" min="0" max="1" step="0.01" value="0.6" />
38+
<label for="g_1">g<sub>1</sub></label>
39+
<input type="number" id="g_1" min="0" max="1" step="0.01" value="0.6" />
40+
<label for="g_2">g<sub>2</sub></label>
41+
<input type="number" id="g_2" min="0" max="1" step="0.01" value="0.01" />
42+
<label for="alpha">&alpha;</label>
43+
<input type="number" id="alpha" min="0" max="1" step="0.01" value="0.01" />
44+
<label for="beta">&beta;</label>
45+
<input type="number" id="beta" min="0" max="1" step="0.01" value="0.2" />
46+
</div>
47+
<label for="t">t</label>
48+
<input type="number" id="t" min="1" max="1000" value="100" />
49+
<button id="solve">Solve</button>
50+
</div>
51+
<div id="plot"></div>
52+
</div>
1153

1254
<script type="module">
1355
import "https://cdn.plot.ly/plotly-3.1.0-rc.0.min.js"
1456

1557
let { solve_abrams_strogatz, solve_diaz_switkes } = wasmBindings;
1658

17-
async function run() {
18-
Plotly.newPlot('abrams', [
19-
{
20-
"y": solve_abrams_strogatz(80, 20, 0.2, 1.31, 0.33, 200),
21-
"name": "Monolingual 1",
22-
"line": {
23-
"color": "red"
24-
}
59+
const model = document.getElementById("model").value;
60+
document.getElementById("abrams").style.display = model === "abrams" ? "block" : "none";
61+
document.getElementById("diaz").style.display = model === "diaz" ? "block" : "none";
62+
63+
document.getElementById("model").addEventListener("change", (e) => {
64+
const model = e.target.value;
65+
document.getElementById("abrams").style.display = model === "abrams" ? "block" : "none";
66+
document.getElementById("diaz").style.display = model === "diaz" ? "block" : "none";
67+
});
68+
69+
document.getElementById("solve").addEventListener("click", async (e) => {
70+
const model = document.getElementById("model").value;
71+
const params = {
72+
abrams: {
73+
x: Number(document.getElementById("x").value),
74+
y: Number(document.getElementById("y").value),
75+
c: Number(document.getElementById("c").value),
76+
a: Number(document.getElementById("a").value),
77+
s: Number(document.getElementById("s").value)
2578
},
26-
{
27-
"y": solve_abrams_strogatz(80, 20, 0.2, 1.31, 0.33, 200).map(y => 100 - y),
28-
"name": "Monolingual 2",
29-
"line": {
30-
"color": "blue"
31-
}
79+
diaz: {
80+
x_1: Number(document.getElementById("x_1").value),
81+
x_2: Number(document.getElementById("x_2").value),
82+
b: Number(document.getElementById("b").value),
83+
m_1: Number(document.getElementById("m_1").value),
84+
m_2: Number(document.getElementById("m_2").value),
85+
g_1: Number(document.getElementById("g_1").value),
86+
g_2: Number(document.getElementById("g_2").value),
87+
alpha: Number(document.getElementById("alpha").value),
88+
beta: Number(document.getElementById("beta").value)
3289
}
33-
]);
90+
}[model];
91+
const t = document.getElementById("t").value;
92+
93+
if (model === "abrams") {
94+
const solution = await solve_abrams_strogatz(params.x, params.y, params.c, params.a, params.s, t);
95+
plot([solution, solution.map(y => (params.x + params.y) - y)]);
96+
} else {
97+
const x = await solve_diaz_switkes([params.x_1, params.x_2, params.b], [params.m_1, params.m_2], [params.g_1, params.g_2], params.alpha, params.beta, t, 0);
98+
const b = await solve_diaz_switkes([params.x_1, params.x_2, params.b], [params.m_1, params.m_2], [params.g_1, params.g_2], params.alpha, params.beta, t, 1);
99+
plot([x, b, x.map((y, i) => (params.x_1 + params.x_2 + params.b) - (y + b[i]))]);
100+
}
101+
});
34102

35-
Plotly.newPlot('diaz', [
36-
{
37-
"y": solve_diaz_switkes(
38-
[33, 34, 33], [0.4, 0.6], [0.6, 0.01], 0.01, 0.2, 300, 0
39-
),
40-
"name": "Monolingual 1",
41-
"line": {
42-
"color": "red"
43-
}
44-
},
45-
{
46-
"y": solve_diaz_switkes(
47-
[33, 34, 33], [0.4, 0.6], [0.6, 0.01], 0.01, 0.2, 300, 1
48-
),
49-
"name": "Bilingual",
50-
"line": {
51-
"color": "blue"
52-
}
103+
function plot(data) {
104+
Plotly.purge("plot");
105+
let input = [];
106+
for (let i = 0; i < data[0].length; i++) {
107+
input.push({ y: data[i] });
108+
}
109+
110+
const layout = {
111+
title: "Lang Shift",
112+
xaxis: {
113+
title: "Time"
53114
},
54-
{
55-
"y": solve_diaz_switkes(
56-
[33, 34, 33], [0.4, 0.6], [0.6, 0.01], 0.01, 0.2, 300, 2
57-
),
58-
"name": "Monolingual 2",
59-
"line": {
60-
"color": "green"
61-
}
115+
yaxis: {
116+
title: "Population"
62117
}
63-
]);
64-
}
118+
};
65119

66-
run();
120+
Plotly.newPlot("plot", input, layout);
121+
}
67122
</script>
68123
</body>
69124
</html>

src/diaz_switkes.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ impl Community {
4242
.iter()
4343
.enumerate()
4444
.filter(|(i, _)| i % 2 == 0)
45-
.map(|(_, y)| y.clone())
45+
.map(|(_, y)| y.clone().iter().map(|y| y * (self.n() as f64)).collect())
4646
.collect()
4747
}
4848
}

0 commit comments

Comments
 (0)