๐ ์ด์ cube-engine.js ํ๋๋ก ๋ชจ๋ ๊ธฐ๋ฅ ์ฌ์ฉ ๊ฐ๋ฅ!
ํน์ ๋ฒํธ๋ฅผ ์ ์ธํ๊ณ ์ถ์ถ
10~100 ๊ฐ์ ๋ฒ์์์๋ง ์ถ์ถ
๋ก๋, ํ์๋ณผ, ์ ๋ก๋ฐ๋ฆฌ์ธ, ํค๋ ธ ๋ฑ
ํ์ต ๋ฐ์ดํฐ ์์ํ ์ง์
const result = await CubeEngine.generate({
items: 45,
pick: 6
});
console.log(result.results); // [[1,7,15,23,31,42], ...]// 2, 5, 17๋ฒ ์ ์ธํ๊ณ ์ถ์ถ
const result = await CubeEngine.generate({
items: 45,
pick: 6,
excludeNumbers: [2, 5, 17] // โ
์ด ๋ฒํธ๋ค์ ์ ๋ ์๋์ด
});// 10~30 ๊ตฌ๊ฐ์์๋ง 6๊ฐ ์ถ์ถ
const result = await CubeEngine.generate({
items: 45, // ์ ์ฒด ๋ฒ์๋ 45์ง๋ง
pick: 6,
rangeStart: 10, // โ
10๋ฒ๋ถํฐ
rangeEnd: 30 // โ
30๋ฒ๊น์ง๋ง ์ฌ์ฉ
});
// ๊ฒฐ๊ณผ ์: [12, 15, 19, 22, 27, 30]// 10~50 ๊ตฌ๊ฐ์์ 3, 15, 27 ์ ์ธํ๊ณ ์ถ์ถ
const result = await CubeEngine.generate({
items: 100,
pick: 5,
rangeStart: 10,
rangeEnd: 50,
excludeNumbers: [3, 15, 27]
});// ๋ก๋ 6/45
const lotto = await CubeEngine.generate(
CubeEngine.presets.lotto645
);
// ๋ฏธ๊ตญ ํ์๋ณผ
const powerball = await CubeEngine.generate(
CubeEngine.presets.powerball
);
// ํค๋
ธ (80๊ฐ ์ค 20๊ฐ)
const keno = await CubeEngine.generate(
CubeEngine.presets.keno
);// ๋ก๋ ํ๋ฆฌ์
์ ์ ์ธ์ซ์ ์ถ๊ฐ
const result = await CubeEngine.generate(
CubeEngine.withPreset('lotto645', {
excludeNumbers: [7, 13, 21],
history: pastDraws // ๊ณผ๊ฑฐ ๋น์ฒจ๋ฒํธ
})
);const pastDraws = [
[3, 12, 18, 25, 34, 41],
[5, 9, 17, 22, 38, 44],
// ... ๋ ๋ง์ ๊ณผ๊ฑฐ ๋น์ฒจ๋ฒํธ
];
const result = await CubeEngine.generate({
items: 45,
pick: 6,
history: pastDraws, // โ
ML ํ์ต์ ์ฌ์ฉ
excludeNumbers: [13] // 13๋ฒ ์ ์ธ
});// ์ด์ ํ์ต ๋ฐ์ดํฐ ๋ก๋
const savedData = await firebase.get('engine_data');
const result = await CubeEngine.generate({
items: 45,
pick: 6,
externalProbMap: savedData.probMap, // ์ ์ฅ๋ ํ๋ฅ ๋งต
initialPool: savedData.pool, // ์ด์ ์ธ๋ ํ
persistenceWeight: 0.7 // 70% ์ ์ง
});
// ๊ฒฐ๊ณผ ์ ์ฅ
await firebase.save({
probMap: result.probMap,
pool: result.fullPool
});const result = await CubeEngine.generate({
items: 45,
pick: 6,
onProgress: (percent, stats) => {
console.log(`์งํ: ${percent}%`);
console.log(`๋ผ์ด๋: ${stats.round}/${stats.totalRounds}`);
console.log(`์ต๊ณ ์ ์: ${stats.bestScore}`);
},
onRound: (roundNum, bestScore) => {
console.log(`๋ผ์ด๋ ${roundNum} ์๋ฃ: ${bestScore}`);
}
});// ํ๊ตญ ๋ก๋ 6/45
CubeEngine.presets.lotto645
// ํ๊ตญ ๋ก๋ 6/38 (๊ณผ๊ฑฐ)
CubeEngine.presets.lotto638
// ๋ฏธ๊ตญ ํ์๋ณผ
CubeEngine.presets.powerball
// ๋ฏธ๊ตญ ๋ฉ๊ฐ๋ฐ๋ฆฌ์ธ
CubeEngine.presets.megamillions
// ์ ๋ฝ ์ ๋ก๋ฐ๋ฆฌ์ธ
CubeEngine.presets.euromillions
// ํค๋
ธ (80๊ฐ ์ค 20๊ฐ)
CubeEngine.presets.keno
// ๋น ๋ฅธ ํ
์คํธ์ฉ
CubeEngine.presets.fast
// ์์ ์ปค์คํ
CubeEngine.presets.customconst result = await CubeEngine.generate({
// โโ ํ์ โโ
items: 45, // ์ ์ฒด ์์ดํ
๊ฐ์
pick: 6, // ์ ํํ ๊ฐ์
// โโ ๋ฒ์ ์ ์ด โโ
rangeStart: 10, // ์์ ๋ฒํธ (null์ด๋ฉด 1๋ถํฐ)
rangeEnd: 40, // ๋ ๋ฒํธ (null์ด๋ฉด items๊น์ง)
excludeNumbers: [13, 27], // ์ ์ธํ ๋ฒํธ๋ค
// โโ ํ์ต ๋ฐ์ดํฐ โโ
history: [[...], [...]], // ๊ณผ๊ฑฐ ๋น์ฒจ๋ฒํธ
// โโ Firebase ์ฐ๋ โโ
externalProbMap: {...}, // ์ ์ฅ๋ ํ๋ฅ ๋งต
initialPool: [[...], ...], // ์ด์ ์ธ๋ ํ
persistenceWeight: 0.7, // ๊ธฐ์กด ์ง์ ์ ์ง์จ
// โโ ์์ง ํ๋ โโ
lambda: 0.18, // ์๊ฐ ๊ฐ์ค์น
learningRate: 0.05, // ML ํ์ต๋ฅ
evolveTime: 80, // ์งํ ์๊ฐ(ms)
rounds: 50, // ๋ผ์ด๋ ์
poolSize: 2500, // ํ๋ณด ํ ํฌ๊ธฐ
topN: 5, // ์ต์ข
๊ฒฐ๊ณผ ๊ฐ์
threshold: 5, // ์ ์ฌ๋ ์๊ณ๊ฐ
// โโ ์ฝ๋ฐฑ โโ
onProgress: (percent, stats) => {},
onRound: (round, score) => {},
onComplete: (result) => {}
});{
results: [ // ์ถ์ฒ ์กฐํฉ๋ค
[1, 7, 15, 23, 31, 42],
[3, 12, 18, 27, 35, 41],
// ...
],
scores: [ // ๊ฐ ์กฐํฉ์ ์ ์
487.32,
452.18,
// ...
],
probMap: { // ๋ฒํธ๋ณ ํ๋ฅ
1: 0.142,
2: 0.089,
// ...
},
fullPool: [...], // ์ ์ฒด ํ๋ณด ํ (Firebase ์ ์ฅ์ฉ)
meta: { // ๋ฉํ๋ฐ์ดํฐ
items: 45,
pick: 6,
validPoolSize: 42, // ์ ํจ ๋ฒํธ ๊ฐ์
excludedCount: 3, // ์ ์ธ๋ ๋ฒํธ ๊ฐ์
rangeStart: 1,
rangeEnd: 45,
elapsed: 12583, // ์์์๊ฐ(ms)
historySize: 1105, // ํ์ต ๋ฐ์ดํฐ ํฌ๊ธฐ
generatedAt: "2025-02-14T08:30:00.000Z"
}
}try {
const result = await CubeEngine.generate({
items: 45,
pick: 6,
rangeStart: 40,
rangeEnd: 43,
excludeNumbers: [40, 41, 42, 43] // โ ์ ํจ ๋ฒํธ 0๊ฐ!
});
} catch(error) {
console.error(error.message);
// "์ ํจํ ๋ฒํธ๊ฐ ๋ถ์กฑํฉ๋๋ค. (ํ์:6, ๊ฐ๋ฅ:0)"
}// ์ฌ์ฉ์๊ฐ 3๊ฐ ์ ํ (7, 15, 23)
// ๋๋จธ์ง 3๊ฐ๋ AI๊ฐ ์ถ์ฒ (10~40 ๊ตฌ๊ฐ, 13 ์ ์ธ)
const result = await CubeEngine.generate({
items: 45,
pick: 3, // 3๊ฐ๋ง ์ถ์ถ
rangeStart: 10,
rangeEnd: 40,
excludeNumbers: [7, 15, 23, 13], // ์ฌ์ฉ์ ์ ํ + ์ ์ธ
history: pastDraws
});
const final = [7, 15, 23, ...result.results[0]].sort((a,b) => a-b);
// [7, 12, 15, 23, 28, 35]| ๊ธฐ๋ฅ | ์ต์ | ์์ |
|---|---|---|
| ์ ์ธ ์ซ์ | excludeNumbers: [2,5,17] |
ํน์ ๋ฒํธ ์๋์ค๊ฒ |
| ๊ตฌ๊ฐ ์ค์ | rangeStart: 10, rangeEnd: 30 |
10~30๋ง ์ฌ์ฉ |
| ๊ฒ์ ํ๋ฆฌ์ | CubeEngine.presets.powerball |
ํ์๋ณผ ์ค์ |
| ๊ณผ๊ฑฐ ํ์ต | history: [[...], [...]] |
ML ํ์ต |
| Firebase | externalProbMap, initialPool |
ํ์ต ์์ํ |
๋ฒ์ : v1.3.0-universal
๋ผ์ด์ ์ค: MIT
์ ์: CubeEngine Team