1. Začnite funkčným príkladom
Táto príručka opisuje RoboPol Math (Beta). Zadanie pripravujete v prehliadači, výpočty však vykonáva CPU servera. Online verzia nepoužíva GPU servera ani GPU návštevníka. Najprv vyskúšajte malý príklad, ktorého vstup a odpoveď viete skontrolovať.
Úlohou je vybrať presne štyri položky z ôsmich možností. Výber musí dodržať cenový a hmotnostný limit, obsahovať aspoň jednu položku z každej z dvoch určených skupín a vylúčiť súčasný výber dvoch nezlučiteľných položiek. Cieľom je dosiahnuť čo najväčší celkový prínos. Najvýhodnejšia samostatná položka preto nemusí patriť do najlepšej zostavy.
- Rozpracované zadanie najprv uložte alebo použite Exportovať zadanie. Import otvorí nové zadanie v pracovnom priestore.
- Kliknite na Importovať adaptér alebo zadanie a vyberte súbor
field-kit.task.json. Môžete tiež otvoriť sekciu Príručka adaptérov, vložiť JSON do poľa Štruktúrované zadanie JSON a zvoliť Otvoriť adaptér alebo zadanie. - Skontrolujte premennú
pick, päť skupín dát, šesť podmienok a cieľ maximalizovať celkový prínos. - Zvoľte Overiť zadanie. Úspešná kontrola potvrdzuje, že výpočtový modul prijal vstupný model. Ešte nejde o nájdené riešenie.
- Spustite výpočet tlačidlom Vypočítať. Vo výsledku si prezrite vybrané položky, dosiahnutý prínos a splnenie jednotlivých podmienok.
Úplné zadanie JSON na import
{
"format": "refined.math.task",
"schemaVersion": 1,
"adapterId": "math-model",
"title": "Field equipment kit — budget 30",
"payload": {
"model": {
"schemaVersion": 1,
"title": "Field equipment kit — budget 30",
"numericPolicy": "exact",
"variables": [
{
"name": "pick",
"kind": "binary",
"shape": [
8
],
"lower": 0,
"upper": 1
}
],
"data": [
{
"name": "cost",
"values": [
"9",
"7",
"8",
"6",
"5",
"4",
"10",
"3"
]
},
{
"name": "mass",
"values": [
"3",
"4",
"5",
"2",
"4",
"1",
"6",
"2"
]
},
{
"name": "benefit",
"values": [
"18",
"16",
"20",
"13",
"14",
"9",
"24",
"8"
]
},
{
"name": "budget",
"values": [
"30"
]
},
{
"name": "massLimit",
"values": [
"16"
]
}
],
"constraints": [
"sum(pick) == 4",
"dot(pick, cost) <= budget",
"dot(pick, mass) <= massLimit",
"pick[1]+pick[2] >= 1",
"pick[3]+pick[4] >= 1",
"pick[2]+pick[7] <= 1"
],
"goal": {
"mode": "maximize",
"expression": "dot(pick, benefit)"
}
}
},
"options": {
"seed": 42,
"timeLimitMs": 3000,
"maxEvaluations": 200000,
"maxWorkUnits": 50000000
}
}2. Rozlíšte adaptér, dáta a výpočet
Adaptér určuje spôsob zápisu možného riešenia, čiže kandidáta, jeho hodnotenie a operácie, ktorými sa dá meniť. Dáta opisujú konkrétnu úlohu: napríklad ceny, merania, hrany grafu alebo dostupné kapacity. Výpočet spojí zvolený adaptér, konkrétne dáta a nastavenia hľadania. Výsledok zostáva priradený k vstupom, s ktorými vznikol.
V príklade predstavuje možné riešenie osem binárnych hodnôt. Jednotka znamená výber položky, nula jej vynechanie. Podmienky určujú prípustnosť výberu a súčet prínosov jeho kvalitu. Zmena názvu položky alebo opisu adaptéra nemení matematické pravidlá.
Všeobecný adaptér math-model umožňuje zapísať premenné, dáta, podmienky a cieľ pomocou podporovaného matematického jazyka. Aplikácia z tohto zápisu pripraví hodnotenie a dostupné operácie na hľadanie riešenia. Pri vstavanom špecializovanom adaptéri dodáte vstup podľa jeho schémy a použijete jeho pripravené operátory. Vlastné programy a zostavené Rust adaptéry opisuje posledná kapitola.
Nastavenia hľadania
V časti Beh začnite profilom Normal. Profil Fast obmedzuje rozsah hľadania, profil Strong povoľuje viac práce. Pri rovnakom krátkom časovom limite nemusí náročnejší profil priniesť lepší výsledok. Nastavenia si pred výpočtom skontrolujte; výber iného profilu zruší vlastné úpravy jeho parametrov.
Učenie využíva poznatky získané počas aktuálneho výpočtu a jeho behov. Automaticky sa neučí zo všetkých starších výpočtov v histórii. Zdieľanie medzi behmi vyžaduje viac behov a závisí od zvoleného režimu. Zapnuté učenie samo osebe nezaručuje lepší výsledok.
CPU návrhy kandidátov zostávajú dostupné tam, kde ich adaptér implementuje. Online verzia vykonáva hľadanie aj tieto návrhy na CPU servera. GPU voľba sa pre nové výpočty neposkytuje; nastavenia požadujúce automatický alebo povinný GPU backend sa odmietnu. Podpora CPU návrhov sama osebe nezaručuje, že ich konkrétny krátky výpočet využil.
Čas, počet vyhodnotení a limity pamäte zostávajú samostatnými hranicami. Počet paralelných pracovníkov je v aplikácii obmedzený. Význam pokročilých volieb nájdete v slovenskom prehľade nastavení; používajte len možnosti dostupné pre aktuálny adaptér.
Online limity a CPU kredit
Spoločné limity Free plánu platia pre vstavané adaptéry, importované profily, programy cez Program SDK aj importované Rust/Wasm moduly. Adaptér môže mať navyše vlastné obmedzenia reprezentácie, dát či práce. Vyšší časový limit preto neznamená, že sa vždy využije celý.
| Oblasť | Hranica |
|---|---|
| Vyhľadávanie | Najviac 30 sekúnd. |
| Celá spustená úloha | Najviac 45 sekúnd vrátane prípravy a záverečnej validácie. Čakanie pred pridelením výpočtu sa do tohto času nezapočítava. |
| Pamäť | 512 MiB pre celý výpočtový proces. Samostatná Wasm inštancia má menší limit uvedený nižšie. |
| Súbeh relácie | Jedna bežiaca a dve čakajúce úlohy. |
| Spoločný výpočtový fond | Najviac dva krátke výpočty naraz a súhrnný strop troch CPU; jedna úloha môže využiť najviac dve CPU podľa svojich možností. |
| Denný CPU kredit | 3 600 CPU-sekúnd, teda jedna CPU-hodina za deň UTC. Denný rozpočet sa obnovuje o 00:00 UTC; samostatný hodinový CPU limit nie je nastavený. |
| Nová serverová história | Najviac 100 ukončených záznamov, uchovanie najviac 30 dní. Platia aj hranice veľkosti úložiska. |
Pri obsadení fondu sa prijaté úlohy striedajú podľa relácií, aby jedna relácia neobsadila oba výpočtové sloty. Rozhranie ukazuje stav a poradie vo fronte. Paralelná úloha nemusí dostať okamžite celý povolený výkon; rozhoduje dostupná kapacita aj možnosti adaptéra.
Zostávajúci kredit vychádza zo spotreby CPU natívnych výpočtových procesov. Čas strávený vo fronte kredit nespotrebúva. Pred prijatím práce sa časť kreditu rezervuje; nevyužitá časť sa po skončení alebo zrušení čakajúcej úlohy vráti. Rezervovaný kredit preto ešte nie je nameranou spotrebou. Príprava a kontrola vykonaná vo výpočtovom procese sa tiež účtuje; opakované odoslanie tej istej prijatej úlohy ju nesmie účtovať druhýkrát.
Ak po prerušení server nedokáže potvrdiť presné meranie, rozhranie môže uviesť časť kreditu účtovanú opatrnostne bez merania. Táto položka sa odlišuje od skutočne nameranej spotreby. Vymazanie histórie denný kredit neobnovuje; čas jeho ďalšej obnovy vidíte v aplikácii vo svojom miestnom čase.
Úplný rozklad cez veľký vedecký faktorizačný backend potrebuje samostatne ohraničený a meraný fond. Tento backend sa v bežnom Free fonde nespúšťa a požiadavka sa odmietne pred jeho štartom. Podporovaný malý natívny rozklad v rozsahu u64 používa spoločné krátke limity. Tento rozdiel sa týka vykonávacej cesty, nie všeobecnej platnosti zápisu veľkých čísel v iných podporovaných úlohách.
3. Zapíšte zadanie ako matematický model
Najprv určte, čo má výpočet rozhodnúť. Tieto neznáme budú rozhodovacími premennými. Ceny, kapacity, merania a koeficienty sú pevné dáta. Ešte pred prípravou súboru JSON si dohodnite jednotky a poradie položiek vo všetkých vektoroch.
| Položka | Cena | Hmotnosť | Prínos |
|---|---|---|---|
| 1 | 9 | 3 | 18 |
| 2 | 7 | 4 | 16 |
| 3 | 8 | 5 | 20 |
| 4 | 6 | 2 | 13 |
| 5 | 5 | 4 | 14 |
| 6 | 4 | 1 | 9 |
| 7 | 10 | 6 | 24 |
| 8 | 3 | 2 | 8 |
Premenná pick má typ binary a rozmer [8]. Dátové skupiny cost, mass a benefit obsahujú rovnako dlhé vektory. Parametre budget a massLimit majú po jednej hodnote: 30 a 16. Prínos vyjadruje bodové hodnotenie na spoločnej škále; jeho vecný význam určujete vy.
| Význam | Zápis |
|---|---|
| Presne štyri položky | sum(pick) == 4 |
| Cenový limit | dot(pick, cost) <= budget |
| Hmotnostný limit | dot(pick, mass) <= massLimit |
| Aspoň jedna položka z prvej skupiny | pick[1]+pick[2] >= 1 |
| Aspoň jedna položka z druhej skupiny | pick[3]+pick[4] >= 1 |
| Položky 2 a 7 sa navzájom vylučujú | pick[2]+pick[7] <= 1 |
Cieľ maximize porovnáva prípustné zostavy podľa výrazu dot(pick, benefit). Na minimalizáciu nákladov alebo chyby slúži minimize. Ak potrebujete akékoľvek riešenie spĺňajúce podmienky, použite find. Povinné pravidlá zapíšte medzi podmienky; do cieľovej funkcie patria preferencie, pri ktorých pripúšťate kompromis.
4. Vyberte správny formát súboru
Rozlišujte opakovane použiteľnú definíciu, konkrétne dáta a celé zadanie. Nasledujúce súbory sa líšia účelom aj obsahom.
| Súbor | Obsah a použitie |
|---|---|
| ModelSpec v1 | Samostatný matematický model: premenné, dáta, podmienky a cieľ. Obsahuje schemaVersion: 1. |
refined.math.task | Celé zadanie vrátane identifikátora adaptéra, vstupov a nastavení výpočtu. Matematický model patrí do payload.model. |
refined.math.adapter | Profil s názvom, opisom vstupu a výstupu, príkladmi a predvoleným zadaním defaultTask. |
refined.math.definition | Pomenovaná definícia vlastného adaptéra s presnou verziou a kontrolným súčtom. Slúži na opakované používanie so samostatnými dátami. |
refined.math.data | Samostatné dátové zadanie odkazujúce na konkrétnu verziu definície. |
refined.math.wasm-adapter | Vykonateľný balík vlastného Rust/Wasm adaptéra. Obsahuje zostavený modul; obyčajný profil s jeho názvom ho nenahrádza. |
Ako východisko použite profil exportovaný z aktuálnej aplikácie. Pri vlastnom matematickom modeli ponechajte adapterId aj runtime.binding nastavené na math-model a zachovajte revíziu jadra z exportu. Názov vlastnej úlohy zapíšte do defaultTask.title a názvu modelu. Polia name, contract či inputSchema vysvetľujú adaptér, ale samy neimplementujú nové výpočtové operácie.
Úplný profil vzorového adaptéra
{
"format": "refined.math.adapter",
"schemaVersion": 1,
"adapterId": "math-model",
"version": "0.6.0",
"name": {
"en": "Field equipment selection",
"sk": "Výber terénnej výbavy"
},
"description": {
"en": "Select equipment that meets cost and mass limits, group requirements and compatibility rules.",
"sk": "Vyberte výbavu, ktorá spĺňa cenový a hmotnostný limit, požiadavky na zastúpenie skupín a pravidlá kompatibility."
},
"help": {
"en": "Define the model in defaultTask.payload.model. Put item costs, masses, benefits and resource limits in its data field.",
"sk": "Matematický model zapíšte do poľa defaultTask.payload.model. Ceny, hmotnosti, prínosy a kapacitné limity vložte do jeho poľa data."
},
"runtime": {
"binding": "math-model",
"coreRevision": "d2c02f944772b7f7a586c4f3357fc90e480349ad",
"inputKey": "model"
},
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Refined Math ModelSpec v1",
"description": "Importable mathematical model. Native validation additionally checks names, shapes, finite domains, numeric policy and checked arithmetic. Use strings for exact decimal, fraction or large integer data.",
"type": "object",
"additionalProperties": false,
"required": [
"schemaVersion",
"title",
"variables",
"data",
"constraints",
"goal"
],
"properties": {
"schemaVersion": {
"const": 1
},
"title": {
"type": "string",
"maxLength": 120
},
"numericPolicy": {
"enum": [
"auto",
"exact",
"real"
],
"default": "auto"
},
"tolerance": {
"type": "object",
"additionalProperties": false,
"properties": {
"absolute": {
"type": "number",
"minimum": 0,
"maximum": 0.1,
"default": 1e-8
},
"relative": {
"type": "number",
"minimum": 0,
"maximum": 0.1,
"default": 1e-8
}
}
},
"variables": {
"type": "array",
"minItems": 1,
"maxItems": 16,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"name",
"kind",
"shape",
"lower",
"upper"
],
"properties": {
"name": {
"$ref": "#/$defs/name"
},
"kind": {
"enum": [
"integer",
"binary",
"permutation",
"real"
]
},
"shape": {
"type": "array",
"minItems": 1,
"maxItems": 2,
"items": {
"type": "integer",
"minimum": 1,
"maximum": 512
}
},
"lower": {
"$ref": "#/$defs/bound"
},
"upper": {
"$ref": "#/$defs/bound"
}
}
}
},
"data": {
"type": "array",
"maxItems": 32,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"name",
"values"
],
"properties": {
"name": {
"$ref": "#/$defs/name"
},
"values": {
"type": "array",
"minItems": 1,
"maxItems": 512,
"items": {
"$ref": "#/$defs/number"
}
}
}
}
},
"constraints": {
"type": "array",
"maxItems": 64,
"items": {
"$ref": "#/$defs/expression"
}
},
"goal": {
"type": "object",
"additionalProperties": false,
"required": [
"mode"
],
"properties": {
"mode": {
"enum": [
"find",
"minimize",
"maximize",
"count"
]
},
"expression": {
"type": "string",
"maxLength": 4096
}
},
"allOf": [
{
"if": {
"properties": {
"mode": {
"enum": [
"minimize",
"maximize"
]
}
}
},
"then": {
"required": [
"expression"
],
"properties": {
"expression": {
"$ref": "#/$defs/expression"
}
}
}
}
]
}
},
"$defs": {
"name": {
"type": "string",
"pattern": "^[A-Za-z_][A-Za-z0-9_]{0,31}$"
},
"expression": {
"type": "string",
"minLength": 1,
"maxLength": 4096
},
"bound": {
"description": "Discrete bounds must be integers within +/-1e9; real bounds within +/-1e12. Binary domains are 0..1.",
"oneOf": [
{
"type": "number",
"minimum": -1000000000000,
"maximum": 1000000000000
},
{
"$ref": "#/$defs/numberString"
}
]
},
"numberString": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[-+]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][-+]?[0-9]+)?(?:/[-+]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][-+]?[0-9]+)?)?$"
},
"number": {
"oneOf": [
{
"$ref": "#/$defs/numberString"
},
{
"type": "number",
"description": "Exact mode accepts safe integer JSON numbers only. Prefer strings for portable exact data."
}
]
}
}
},
"contract": {
"state": {
"en": "Eight binary values in the same item order as the parameter vectors.",
"sk": "Osem binárnych hodnôt, ktorých poradie zodpovedá poradiu položiek v dátových vektoroch."
},
"score": {
"en": "Six hard conditions; maximize total benefit among feasible candidates.",
"sk": "Šesť povinných podmienok a maximalizácia celkového prínosu prípustných kandidátov."
},
"operators": {
"en": [
"Supported proposals for binary changes and exchanges, selected by the model compiler."
],
"sk": [
"Návrhy podporovaných binárnych zmien a výmen, ktoré vyberá prekladač modelu."
]
},
"output": {
"en": "The pick vector, objective value, condition checks, numeric policy and available calculation statistics.",
"sk": "Vektor pick, hodnota cieľovej funkcie, kontroly podmienok, numerická politika a dostupné štatistiky výpočtu."
}
},
"defaultTask": {
"format": "refined.math.task",
"schemaVersion": 1,
"adapterId": "math-model",
"title": "Field equipment kit — budget 30",
"payload": {
"model": {
"schemaVersion": 1,
"title": "Field equipment kit — budget 30",
"numericPolicy": "exact",
"variables": [
{
"name": "pick",
"kind": "binary",
"shape": [
8
],
"lower": 0,
"upper": 1
}
],
"data": [
{
"name": "cost",
"values": [
"9",
"7",
"8",
"6",
"5",
"4",
"10",
"3"
]
},
{
"name": "mass",
"values": [
"3",
"4",
"5",
"2",
"4",
"1",
"6",
"2"
]
},
{
"name": "benefit",
"values": [
"18",
"16",
"20",
"13",
"14",
"9",
"24",
"8"
]
},
{
"name": "budget",
"values": [
"30"
]
},
{
"name": "massLimit",
"values": [
"16"
]
}
],
"constraints": [
"sum(pick) == 4",
"dot(pick, cost) <= budget",
"dot(pick, mass) <= massLimit",
"pick[1]+pick[2] >= 1",
"pick[3]+pick[4] >= 1",
"pick[2]+pick[7] <= 1"
],
"goal": {
"mode": "maximize",
"expression": "dot(pick, benefit)"
}
}
},
"options": {
"seed": 42,
"timeLimitMs": 3000,
"maxEvaluations": 200000,
"maxWorkUnits": 50000000
}
},
"samples": [
{
"id": "field-kit-budget30",
"name": {
"en": "Budget 30",
"sk": "Rozpočet 30"
},
"expected": {
"en": "Independent reference: items 1, 3, 7, 8; cost 30; mass 16; benefit 70.",
"sk": "Nezávislá referencia: položky 1, 3, 7, 8; cena 30; hmotnosť 16; prínos 70."
},
"task": {
"format": "refined.math.task",
"schemaVersion": 1,
"adapterId": "math-model",
"title": "Field equipment kit — budget 30",
"payload": {
"model": {
"schemaVersion": 1,
"title": "Field equipment kit — budget 30",
"numericPolicy": "exact",
"variables": [
{
"name": "pick",
"kind": "binary",
"shape": [
8
],
"lower": 0,
"upper": 1
}
],
"data": [
{
"name": "cost",
"values": [
"9",
"7",
"8",
"6",
"5",
"4",
"10",
"3"
]
},
{
"name": "mass",
"values": [
"3",
"4",
"5",
"2",
"4",
"1",
"6",
"2"
]
},
{
"name": "benefit",
"values": [
"18",
"16",
"20",
"13",
"14",
"9",
"24",
"8"
]
},
{
"name": "budget",
"values": [
"30"
]
},
{
"name": "massLimit",
"values": [
"16"
]
}
],
"constraints": [
"sum(pick) == 4",
"dot(pick, cost) <= budget",
"dot(pick, mass) <= massLimit",
"pick[1]+pick[2] >= 1",
"pick[3]+pick[4] >= 1",
"pick[2]+pick[7] <= 1"
],
"goal": {
"mode": "maximize",
"expression": "dot(pick, benefit)"
}
}
},
"options": {
"seed": 42,
"timeLimitMs": 3000,
"maxEvaluations": 200000,
"maxWorkUnits": 50000000
}
}
},
{
"id": "field-kit-budget27",
"name": {
"en": "Budget 27",
"sk": "Rozpočet 27"
},
"expected": {
"en": "Independent reference: items 2, 3, 4, 5; cost 26; mass 15; benefit 63.",
"sk": "Nezávislá referencia: položky 2, 3, 4, 5; cena 26; hmotnosť 15; prínos 63."
},
"task": {
"format": "refined.math.task",
"schemaVersion": 1,
"adapterId": "math-model",
"title": "Field equipment kit — budget 27",
"payload": {
"model": {
"schemaVersion": 1,
"title": "Field equipment kit — budget 27",
"numericPolicy": "exact",
"variables": [
{
"name": "pick",
"kind": "binary",
"shape": [
8
],
"lower": 0,
"upper": 1
}
],
"data": [
{
"name": "cost",
"values": [
"9",
"7",
"8",
"6",
"5",
"4",
"10",
"3"
]
},
{
"name": "mass",
"values": [
"3",
"4",
"5",
"2",
"4",
"1",
"6",
"2"
]
},
{
"name": "benefit",
"values": [
"18",
"16",
"20",
"13",
"14",
"9",
"24",
"8"
]
},
{
"name": "budget",
"values": [
"27"
]
},
{
"name": "massLimit",
"values": [
"16"
]
}
],
"constraints": [
"sum(pick) == 4",
"dot(pick, cost) <= budget",
"dot(pick, mass) <= massLimit",
"pick[1]+pick[2] >= 1",
"pick[3]+pick[4] >= 1",
"pick[2]+pick[7] <= 1"
],
"goal": {
"mode": "maximize",
"expression": "dot(pick, benefit)"
}
}
},
"options": {
"seed": 42,
"timeLimitMs": 3000,
"maxEvaluations": 200000,
"maxWorkUnits": 50000000
}
}
}
]
}Pri vstavaných natívnych adaptéroch sa vstup ukladá do payload.input, pri symbolickom výpočte do payload.symbolic. Presné štruktúry určujú schémy modelu, zadania, profilu, definície a dát. Export databázy celej knižnice nie je jedným samostatným zadaním; na otvorenie výpočtu použite konkrétny profil alebo zadanie.
5. Používajte podporovaný matematický jazyk
Typy integer, binary, permutation a real určujú domény premenných: celé čísla, hodnoty 0 a 1, permutácie a reálne čísla. Rozmer [8] označuje vektor s ôsmimi prvkami a [3,3] maticu s tromi riadkami a tromi stĺpcami. Jedna hodnota sa vo výrazoch používa ako skalár; pri premennej jej zodpovedá rozmer [1].
V matematickom modeli sa indexuje od jednotky. Index musí byť celé číslo zapísané priamo vo výraze, napríklad pick[1] alebo m[2,3]. Zápis pick[i] nie je podporovaný. Vstavané natívne adaptéry môžu používať iné číslovanie; pri ich dátach sa riaďte schémou a popismi konkrétneho adaptéra.
Na prácu s vektormi slúžia funkcie sum, product, sumSquares, min, max, mean a dot. Z matice vyberiete riadok pomocou row, stĺpec pomocou column a uhlopriečku pomocou diagonal. Pri štvorcovej matici označuje diagonal(m,0) hlavnú a diagonal(m,1) vedľajšiu uhlopriečku. Funkcia allDifferent overuje, či sú všetky hodnoty navzájom rôzne.
Dostupné sú aritmetické operátory + - * / % ^, porovnania == != < <= > >= a logické operátory && || !. Jazyk obsahuje aj funkcie ako abs, gcd, lcm, floor, ceil, choose a podmienený výraz if. Názvy rozlišujú veľkosť písmen. Vlastné funkcie ani ľubovoľný programový kód do týchto výrazov nepatria.
Numerická politika exact používa presnú aritmetiku v podporovanom rozsahu. Politika real používa približné vyhodnotenie s toleranciou a auto vyberie vhodný spôsob vyhodnotenia. Funkcie ako sin, exp alebo sqrt vyžadujú približné numerické vyhodnotenie. Presné desatinné a zlomkové parametre zapisujte ako reťazce, napríklad "12.50" alebo "1/3".
Model môže obsahovať najviac 16 skupín premenných s celkovým počtom 512 rozhodovacích hodnôt, 32 dátových skupín s najviac 512 hodnotami v každej skupine a 64 podmienok. Jeden výraz má limit 4 096 bajtov. Identifikátor môže mať najviac 32 ASCII znakov, začína písmenom alebo podčiarkovníkom a nesmie sa opakovať ani zhodovať s rezervovaným názvom.
6. Ukladajte adaptér oddelene od dát
Definíciu importujte raz a ďalšie vstupy dodávajte ako samostatné dátové súbory. Knižnica Moje adaptéry uchová názov, opis, pravidlá vstupu a výstupu aj verzie definície v tomto prehliadači. Konkrétne dátové zadania zostávajú priradené k príslušnej verzii.
- Cez Importovať adaptér alebo zadanie otvorte
field-kit.definition.json. Definíciu nájdete v knižnici Moje adaptéry. - Importujte
field-kit-budget27.data.json. Aplikácia najprv zobrazí náhľad zmeny rozpočtu. - Zvoľte Použiť dáta, potom zadanie overte a vypočítajte. Model teraz používa rozpočet 27. Jeho referenčný prínos je 63; pri pôvodnom rozpočte 30 je 70.
- V zozname Uložené dátové zadania môžete opäť otvoriť obe inštancie. Predchádzajúce výpočty si ponechajú pôvodné dáta aj verziu adaptéra.
Matematické dátové zadanie musí obsahovať všetky deklarované skupiny parametrov s pôvodnými názvami a počtom hodnôt. Parametre patria do payload.modelData, natívny vstup do payload.input a symbolický vstup do payload.symbolic. Tento dátový dokument nemení premenné, podmienky ani cieľ. Pri zmene štruktúry modelu použite Uložiť verziu adaptéra a ďalšie dátové súbory pripravte pre novú verziu.
Pri ručnej príprave dát zachovajte celý odkaz definition vrátane id, revision a digest z exportovanej definície. Kontrolný súčet si nevymýšľajte. Voliteľné polia id a digest samotného dátového dokumentu môžete vynechať; aplikácia ich vypočíta po overení. Samostatné CSV ani nepriradené pole JSON nie sú hotovým dátovým zadaním. Najprv ich preveďte podľa schémy dát.
Knižnica a rozpracované zadania
V knižnici môžete odstrániť vlastný adaptér so všetkými jeho verziami a priradenými dátami. Jednotlivé dátové zadanie odstránite aj samostatne v detaile adaptéra. Aplikácia si vyžiada potvrdenie. Uložené projekty, aktuálne vstupy a história výpočtov zostanú zachované. Aktuálne pracovné zadanie sa môže odpojiť od odstránenej knižničnej definície; historické snímky vstupov sa nemenia.
Obnova konceptu otvorí neuloženú kópiu rozpracovaného zadania. Voľba Uložiť projekt ako kópiu zachová pôvodný projekt. Knižnica a projekty sú uložené lokálne v prehliadači; dôležité definície a dáta si exportujte, najmä pred zmenou prehliadača alebo vymazaním jeho úložiska.
Online relácia, história a obnova spojenia
V sekcii Výpočty otvoríte uložené výsledky, porovnáte dokončené výpočty a zastavíte aktívnu úlohu. Po prijatí na server môžete stránku obnoviť a k výpočtu sa vrátiť. K dispozícii je stav úlohy, uplynutý čas a prijaté limity; priebežná krivka cieľovej funkcie sa neposkytuje.
Nové ukončené Free záznamy sa uchovávajú najviac 30 dní a v histórii ich môže byť najviac 100. Server má aj bezpečnostnú kapacitu 384 MiB na reláciu a spoločné kapacitné hranice; sto záznamov preto nie je prísľubom neobmedzenej veľkosti každého výsledku. Aktuálnu kapacitu vidíte v aplikácii. Staršia lokálna história má vlastný limit 20 záznamov.
Dôležitý výsledok exportujte pred uplynutím jeho uchovávania. Staršie záznamy bez novej Free politiky a obnoviteľné pozastavené úlohy sa pri jej zavedení automaticky nemažú. Miesto uvoľníte odstránením ukončeného výpočtu alebo voľbou Vymazať ukončené výpočty. Archivácia miesto neuvoľňuje; vymazanie histórie nemení denný CPU kredit. Aktívne výpočty sa nedajú priamo vymazať.
Výsledok, ktorý chcete zachovať, pred odstránením exportujte. Serverová história patrí súkromnej relácii tohto prehliadača; nepredstavuje automaticky synchronizovaný používateľský účet. Zastavenie úlohy nemusí poskytnúť čiastočné riešenie, pretože výpočtový modul vracia skontrolovaný výsledok až pri dokončení.
Prehliadač a server uchovávajú odlišné údaje. Projekty, koncepty, definície a uložené dátové zadania v knižnici sú lokálne v prehliadači. Prijaté výpočty, ich vstupné snímky, výsledky a prijaté vykonateľné balíky majú súkromné serverové úložisko danej relácie. To nevytvára cloudovú synchronizáciu knižnice ani obnovu účtu na inom zariadení. Pre dôležité dáta si ponechajte prenosné exporty.
Po prerušení siete pokračujte v tej istej relácii a obnovte spojenie. Aplikácia sa pokúsi nájsť už prijatú úlohu podľa jej identity. Pri manuálnom zastavení skončí vybraná úloha, nie výpočty ostatných relácií. Platný čiastočný výsledok sa zobrazí iba vtedy, ak ho server skutočne dostal a skontroloval; priebeh ani percento dokončenia sa nedopĺňajú odhadom.
7. Pripravte presné podklady pre AI
AI môžete použiť ako pomoc pri zostavení modelu. Poskytnite jej opis úlohy, jednotky, vstupné tabuľky, všetky povinné podmienky a jasne určený cieľ. Priložte aktuálnu schému a funkčný príklad. Požiadajte ju, aby najprv odlíšila rozhodovacie premenné od pevných dát, uviedla predpoklady a upozornila na nejasné požiadavky.
Pri matematickom modeli požadujte úplný dokument refined.math.task s adaptérom math-model. Musí používať podporované výrazy, číselné indexy a správne rozmery. Pri zmene dát v celom zadaní sa mení payload.model.data; pri samostatnom dátovom dokumente ide o payload.modelData. AI má zachovať formuláciu a skontrolovať poradie aj počet hodnôt.
Do matematického modelu nepatrí JavaScript, odkaz na externý dátový súbor ani vymyslená funkcia. Vlastné operátory pripravujte podľa príslušného Program SDK alebo Rust SDK. AI nie je súčasťou samotného hľadania riešenia v Refined Math a jej odpoveď nie je zaznamenaným výpočtom aplikácie.
Stiahnuť pokyny pre AIVzor pokynov pre AI
Vytvor deklaratívny profil adaptéra a dátové zadanie pre aktuálnu verziu RoboPol Math (Beta).
Tento pokyn je určený na tvorbu matematických modelov a dát pre nainštalované adaptéry. Ak úloha vyžaduje vlastnú inicializáciu, operátory alebo lokálne hľadanie, najprv túto potrebu vysvetli a použi samostatný kontrakt Customer Program SDK v1 alebo Rust SDK v1. Nevkladaj spustiteľný kód do ModelSpec a neoznačuj obyčajný zdrojový súbor v jazyku Rust za importovateľný adaptér.
Online verzia vykonáva výpočty iba na CPU servera; nepoužíva GPU servera ani návštevníka. Nevyžaduj prístup k implementácii súkromného jadra ani jeho úpravy. Vychádzaj z aktuálnej online príručky, exportovaného profilu a verejného SDK.
Pravidlá Free plánu: najviac 30 sekúnd hľadania, 45 sekúnd celej spustenej úlohy vrátane prípravy a validácie, 512 MiB na celý výpočtový proces. Jedna súkromná relácia prehliadača má jednu bežiacu a dve čakajúce úlohy a denný rozpočet 3 600 CPU-sekúnd, obnovovaný o 00:00 UTC; samostatný hodinový CPU limit nie je. Čakanie nespotrebúva CPU kredit. Neuvádzaj vymyslené hodnoty spotreby ani stavu používateľovho rozpočtu. Pri neznámom meraní zachovaj rozlíšenie opatrnostne účtovaného kreditu. Neopisuj túto reláciu ako hotový zákaznícky účet.
Úloha: [Opíš rozhodnutia, jednotky, vstupné údaje, povinné podmienky a cieľ.]
Malý referenčný príklad: [Uveď prípustný prípad s hodnotami, ktoré sa dajú nezávisle overiť.]
Prílohy: profil exportovaný z aktuálnej aplikácie vo formáte refined.math.adapter a schémy model.schema.json, task.schema.json a adapter.schema.json. Pri zabezpečení kompatibility vychádzaj z exportovaného profilu.
Odovzdaj dva samostatné súbory JSON v kódovaní UTF-8:
1. my-problem.adapter.json
Najprv vyber vhodný nainštalovaný adaptér a skopíruj jeho dodaný profil. Pre matematické hľadanie použi math-model, pre presné počítanie finite-count, pre symbolické transformácie symbolic a pre vhodný natívny adaptér jeho registrované ID. Ak správny profil chýba, vyžiadaj si export.
Uprav opisné polia name, description, help a contract tak, aby presne opisovali model a vybraný adaptér. Do defaultTask vlož úplné vzorové zadanie. Zachovaj format s hodnotou refined.math.adapter a schemaVersion s hodnotou 1. Ponechaj pôvodné hodnoty polí adapterId, runtime.binding, runtime.inputKey a runtime.coreRevision. Každé zadanie v samples[].task musí používať rovnaký registrovaný adaptér. Metadáta opisujú správanie; neimplementujú spustiteľné operátory.
2. my-problem.task.json
Vytvor úplné samostatné zadanie. Pole format nastav na refined.math.task a pole schemaVersion na 1. Použi rovnaký adapterId, názov v poli title, príslušný obsah poľa payload a ohraničené nastavenia v poli options. Matematické a počítacie zadania používajú payload.model, natívne zadania payload.input a symbolické zadania payload.symbolic. Pri použití ModelSpec vlož celý matematický model do payload.model a hodnoty jeho pevných parametrov do payload.model.data. Nepoužívaj odkazy na externé súbory. Samostatný import dát vyžaduje formát refined.math.data a presný odkaz na uloženú definíciu adaptéra.
Nasledujúce pokyny pre ModelSpec platia pre math-model a finite-count. Natívne a symbolické vstupy musia dodržiavať vlastné exportované kontrakty.
ModelSpec v1 obsahuje schemaVersion, title, variables, data, constraints a goal. Pre podporovanú presnú aritmetiku nastav numericPolicy na exact. Pre približné numerické výpočty použi auto alebo real a uveď toleranciu.
Deklaruj skupiny premenných typu integer, binary, permutation alebo real s poľami shape, lower a upper. Hranice musia byť pevné číselné hodnoty. Permutačný interval musí obsahovať presne toľko celých čísel, koľko pozícií má deklarovaný stav.
Pole data obsahuje pomenované skupiny parametrov, z ktorých každá má pole values. Jednoprvkové pole values predstavuje skalárny parameter. Zlomky, desatinné čísla a veľké presné celé čísla zapisuj ako reťazce JSON.
Indexuj od jednotky pomocou celých čísel zapísaných priamo vo výraze, napríklad pick[1]. Na prácu s vektormi používaj dot, sum, product, sumSquares, mean, min, max a allDifferent. Výbery z matíc zahŕňajú row(M,1), column(M,1), diagonal(M,0) pre hlavnú diagonálu a diagonal(M,1) pre vedľajšiu diagonálu štvorcovej matice. Podporované sú aj abs, sqrt, sin, cos, tan, exp, ln, log10, norm, floor, ceil, round, sign, gcd, lcm, factorial, choose a if. Niektoré funkcie vyžadujú približnú aritmetiku.
Vo výrazoch možno používať + - * / % ^, == != < <= > >= a && || !. Násobenie zapisuj výslovne. Nepoužívaj cykly, generovanie kolekcií výrazmi typu comprehension, premenné indexy, syntax JavaScriptu alebo Pythonu, Math.*, eval ani nahraný zdrojový kód.
Pre ciele find, minimize a maximize použi math-model. Počítanie vyžaduje konečné diskrétne domény, presné podmienky a napojenie finite-count v celom profile aj zadaní. Symbolické transformácie používajú napojenie symbolic a payload.symbolic. Každú navrhovanú zmenu požadovanej výpočtovej cesty vysvetli.
Prvé overovacie zadanie nech je malé. Limity ModelSpec sú 1–16 skupín premenných, spolu 512 rozhodovacích hodnôt, 32 dátových skupín po najviac 512 hodnotách, 64 podmienok, 4 096 bajtov UTF-8 na výraz a 120 znakov na názov. Použi jedinečné ASCII názvy do 32 znakov, ktoré sa začínajú písmenom alebo podčiarkovníkom. Nepoužívaj rezervované názvy vrátane názvov funkcií. Každý bežný importovaný dokument JSON vytvorený podľa tohto pokynu môže mať najviac 131 072 bajtov (128 KiB). Spustiteľné balíky pre Rust SDK majú vlastný formát a limity a nepatria do tohto deklaratívneho postupu.
Pri matematickom hľadaní s ModelSpec začni týmito nastaveniami options:
{"seed":42,"timeLimitMs":3000,"maxEvaluations":200000,"maxWorkUnits":50000000}
Ak riešenie vyžaduje vlastný Rust adaptér, použi aktuálny samostatný Rust SDK v1 a jeho kontrolný postup. Autor ho zostaví externe do Wasm a vytvorí úplný balík refined.math.wasm-adapter; server nekompiluje nahraný Rust a neprijíma natívne EXE/DLL. Limity: modul 512 KiB, balík 4 MiB, zdroje najviac 64 súborov/2 MiB, predvolené dáta a každý príklad 64 KiB, jeden stav 64 KiB, požiadavka/odpoveď 128 KiB. Celé online zadanie má najviac 128 KiB vrátane metadát; 64 KiB nie je univerzálny limit všetkých dát pri behu. Wasm inštancia má 32 MiB a najviac štyri inštancie sa podieľajú na hľadaní; 512 MiB je hranica celého procesu. Celá JSON odpoveď smie obsahovať najviac 8 192 počítaných hodnôt a kľúčov a hĺbku 40. Palivo má hranice 50 miliónov jednotiek na volanie, 500 miliónov na vyhľadávanie a ďalších najviac 250 miliónov na čerstvú validáciu; nie sú to CPU-sekundy a môžu ukončiť beh skôr než časový limit. Nepredpokladaj hostiteľské importy, WASI, GPU, natívne knižnice ani prístup k súborom, sieti alebo procesom. Neoznačuj kontrolu autora za nezávislý matematický dôkaz.
Nevymýšľaj nepodporované polia, funkcie, napojenia runtime, vlastný kód vykresľovania ani kompilované balíky adaptérov.
Pri iných typoch adaptérov zachovaj kontrakt nastavení z exportovaného profilu. Nastavenia matematického modelu nekopíruj do iného napojenia bez overenia ich podpory.
Pred odovzdaním súborov vysvetli reprezentáciu kandidáta, pevné údaje, každú povinnú podmienku, cieľ a jednu nezávislú kontrolu. Skontroluj rozmery vektorov, jednotky, hranice, prípustnosť, menovatele, definičné obory funkcií a aritmetický rozsah. Pri odstraňovaní symetrií over, že sú príslušné možnosti v pôvodnej úlohe rovnocenné. Opíš, ako vymeniť dátové hodnoty a zachovať pritom rovnaký model.
Pomenuj konkrétnu odpoveď, ktorú má používateľ vo výsledku hľadať: vybrané položky, priradenie, hodnoty alebo vzorec. Význam a jednotky cieľovej funkcie vysvetli oddelene od rozhodovacieho vektora. Vlastné zobrazenie výsledkov musí dodržať aktuálnu schému outputs.schema.json a používať iba jej deklaratívne projekcie bez vykresľovacieho kódu.
Ak požiadavku nemožno vyjadriť podporovanými operáciami, pomenuj obmedzenie a vyžiadaj si preformulovanie. Nepoužívaj iba vierohodne vyzerajúcu nepodporovanú syntax.
Nevymýšľaj výsledky aplikácie, štatistiky jadra, certifikáty ani tvrdenia o vykonaných testoch. Prípustný výsledok alebo stav best_found nedokazuje globálnu optimalitu; no_solution_found nedokazuje neriešiteľnosť. Nezávislé matematické referenčné hodnoty odlišuj od výsledkov skutočného výpočtu v aplikácii.
Samotný stav best_found nepotvrdzuje ani prípustnosť. Skontroluj pole feasible a vrátené kontroly podmienok. Zhoda opätovne vypočítaného skóre sama osebe nie je dôkazom optimality.
Ak nevieš vytvoriť súbory, odovzdaj pre každý súbor samostatný, jasne pomenovaný blok JSON. Každý blok musí obsahovať úplný a platný JSON bez komentárov alebo vynechaných častí. Používateľ profil alebo zadanie načíta pomocou tlačidla Importovať adaptér alebo zadanie a následne použije tlačidlá Overiť zadanie a Vypočítať.
Pri opakovanom použití najprv importuj profil a exportuj jeho dokument refined.math.definition. Pre ďalšiu inštanciu vytvor refined.math.data v1 s názvom title, presným objektom definition (id, revision, digest) a poľom payload.modelData obsahujúcim všetky pomenované skupiny parametrov s nezmeneným počtom hodnôt. Natívne dáta používajú payload.input a symbolické dáta payload.symbolic. Pri tvorbe zmenených dát vynechaj voliteľné id a digest samotného dátového dokumentu; digest definície si nikdy nevymýšľaj. Aplikácia pred použitím dát overí a zobrazí náhľad zmien. Zmena štruktúry modelu vyžaduje novú verziu definície.
Online ukladanie rozlišuje lokálnu knižnicu/projekty/koncepty v prehliadači a súkromné serverové výpočty s ich vstupnými snímkami, výsledkami a prijatými balíkmi. Nepredpokladaj synchronizáciu účtu či obnovu na inom zariadení. Nové ukončené Free záznamy majú hranicu 100 výsledkov a uchovanie najviac 30 dní; odporuč export dôležitých vstupov, definícií, dát a vykonateľných balíkov. Samotný odkaz na modul nenahrádza jeho úplný balík. Vymazanie histórie neobnovuje CPU kredit.
Veľký vedecký faktorizačný backend sa v krátkom Free fonde nespúšťa, kým nemá samostatný ohraničený a meraný fond. Nepredkladaj jeho úplný rozklad ako dostupnú vykonanú cestu. Malý natívny u64 rozklad podlieha spoločným krátkym limitom. Ak sa zmení kompatibilita alebo bezpečnostná identita runtime, používateľ môže potrebovať opätovný import pôvodného balíka.
Pripravený dokument načítajte a overte v aplikácii. Okrem syntaxe skontrolujte jeho význam: opačne zapísaná nerovnosť, vynechaná podmienka alebo zamenené poradie stĺpcov môžu viesť k nesprávnej úlohe. Prvý malý prípad porovnajte s ručným výpočtom. Tvrdenie AI o „optime“ nenahrádza skutočný výsledok ani jeho dôkaz.
8. Zistite, čo výsledok skutočne znamená
Začnite konkrétnym riešením: vybranými položkami, priradením hodnôt, poradím úloh, farbami vrcholov alebo vypočítanými koeficientmi. Cieľová hodnota vyjadruje kvalitu tohto riešenia. Pri regresii môže ísť o chybu aproximácie; samotná malá chyba nevysvetľuje, akú funkciu alebo aké koeficienty ste dostali.
Potom skontrolujte prípustnosť: hodnoty patria do deklarovaných domén a všetky povinné podmienky platia. Pri približnom výpočte porovnajte rezíduá, teda zostávajúce odchýlky, s povolenou toleranciou. Napríklad bezkonfliktné farbenie grafu potvrdzuje platné priradenie pre zadaný počet farieb; samo nedokazuje, že menej farieb nie je možné použiť.
| Údaj alebo stav | Význam |
|---|---|
feasible: true | Riešenie spĺňa kontrolované podmienky. Prípustnosť nie je dôkazom najlepšej možnej cieľovej hodnoty. |
best_found | Najlepší nájdený výsledok daného výpočtu; globálna optimalita nie je preukázaná. Prípustnosť kontrolujte samostatne. |
optimal_proven | Výsledok má konkrétny dôkaz optimality. Jeho druh a podklady sú uvedené v poli proof. |
no_solution_found | Výpočet nenašiel prípustné riešenie. Tento stav sám nedokazuje, že riešenie neexistuje. |
count_exact a count_partial | Úplný počet riešení alebo doteraz zistený čiastočný počet. Pri čiastočnom výsledku ide o dolnú hranicu. |
scoreMatches | Opätovné vyhodnotenie súhlasí so zaznamenaným skóre. Táto kontrola sama nepotvrdzuje prípustnosť ani optimalitu. |
Počítanie cez finite-count vyžaduje konečné domény; úplnosť potvrdzuje countComplete. Symbolický výstup posudzujte spolu s uvedenými podmienkami platnosti a obmedzeniami definičného oboru. Vizualizácia pomáha čítať vrátené hodnoty, ale nenahrádza kontrolu podmienok ani matematický dôkaz.
Vykonaná práca a ukončenie hľadania
Dokončená serverová úloha nemusí znamenať úspešne vyriešený matematický problém. Pozrite sa na stav výsledku, dôvod ukončenia a zaznamenané počítadlá. Časový limit alebo hranica práce môže ukončiť hľadanie s najlepším dovtedy skontrolovaným kandidátom. Počet aktualizácií učenia a CPU návrhov opisuje skutočne zaznamenanú prácu. Nový online výpočet GPU nepoužíva; importovaný historický výsledok si ponecháva pôvodné počítadlá vrátane GPU, ak boli zaznamenané.
Adaptéry s podporovaným dôkazom optima po jeho nájdení odovzdajú skutočné overené riešenie aj ostatným behom toho istého výpočtu. Tie už zbytočne nepokračujú v hľadaní; prebiehajúca operácia však môže dobehnúť po najbližší kontrolný bod. Plánovač jadra môže naďalej dokončovať riadenie behov a zdieľaného učenia. Samotné lokálne optimum alebo dosiahnutie referenčnej hodnoty takýto dôkaz nevytvára.
Export a porovnávanie
Celý výsledok exportujte vo formáte JSON, pomenované tabuľky vo formáte CSV a dostupné grafy vo formáte SVG alebo PNG. Exporty zachovávajú údaje o pôvode výpočtu. Celý výsledok obsahuje aj pôvodné zadanie a identifikátor výpočtu. Na opätovné načítanie zadania použite jeho export alebo profil adaptéra; súbor výsledku sa automaticky neimportuje ako nové zadanie.
Vo Výpočtoch môžete vybrať dva dokončené záznamy na porovnanie. Zmysluplné porovnanie cieľovej hodnoty vyžaduje rovnaké dáta, formuláciu a jednotky a dva prípustné výsledky. Odlišný seed alebo profil hľadania sa v porovnaní môže zobraziť, ale zmenené zadanie už nie je tým istým porovnávacím prípadom.
9. Vyriešte problémy s importom a výpočtom
- Neznámy adaptér alebo nezhoda revízie jadra
- Použite profil exportovaný z aktuálnej aplikácie. Identifikátor výpočtového napojenia nenahrádzajte vlastným neregistrovaným názvom. Vlastný názov patrí do názvu definície alebo zadania.
- Neznámy symbol, nesprávny index alebo typ
- Porovnajte názvy s deklaráciami, skontrolujte rozmery a pri matematickom modeli indexujte od jednotky. Skalárny parameter s jednou hodnotou použite bez indexu. Pri natívnom adaptéri rešpektujte číslovanie jeho vstupu.
- Neplatný JSON alebo priveľký dokument
- JSON nesmie obsahovať komentáre ani čiarky za poslednými položkami. Bežný model, profil, definícia alebo zadanie má limit 131 072 bajtov pri importe súboru a 131 072 znakov pri vložení textu. Vykonateľný balík Rust/Wasm má osobitný limit 4 MiB a jeho modul najviac 512 KiB. Väčšie pole na vloženie JSON nezvyšuje limit bežných dokumentov.
- Samostatný dátový súbor sa nedá použiť
- Najprv importujte zodpovedajúcu definíciu adaptéra. Porovnajte jej identifikátor, verziu a kontrolný súčet s odkazom v dátovom dokumente. Pri matematickom modeli musia súhlasiť aj názvy skupín a počet hodnôt.
- Overenie vstupu uspelo, ale výsledok nie je prípustný
- Kontrola vstupu nezaručuje existenciu riešenia. Preskúmajte konfliktné podmienky, domény a limity. Začnite menším zadaním, ktoré viete overiť ručne. Čas alebo rozsah hľadania zvyšujte až po kontrole formulácie.
- Výsledok je slabší než referencia
- Skontrolujte zhodu dát, cieľa a numerických pravidiel. Porovnajte profil, seed a prijaté limity. Referencia pôvodného príkladu automaticky neplatí po úprave jeho vstupov. Zachovajte zadanie aj výsledok, aby sa rozdiel dal preskúmať.
- Importované nastavenia požadujú GPU
- RoboPol Math (Beta) používa iba CPU servera. GPU servera ani návštevníka sa nezapája. Použite nastavenia exportované z tejto online verzie; požiadavky na automatický alebo povinný GPU backend sa odmietajú. Pôvodné GPU údaje v historickom výsledku ostávajú označené ako historické.
- CPU kredit je vyčerpaný alebo rezervovaný
- Skontrolujte zostávajúci a rezervovaný kredit aj čas dennej obnovy. Čakajúca úloha drží rezerváciu, ale čakanie nespotrebúva CPU. Zrušenie čakajúcej úlohy uvoľní jej rezerváciu. Vymazanie výsledkov rozpočet neobnovuje; prípadné opatrnostné účtovanie bez merania sa zobrazuje osobitne.
- Rust/Wasm skončil pre limit paliva, pamäte alebo veľkosti správy
- Porovnajte modul, stav a dáta s limitmi Rust SDK. Inštrukčné palivo môže skončiť skôr než 30-sekundový rozpočet hľadania. Limit 512 MiB celého procesu nezvyšuje 32 MiB pamäť jednej Wasm inštancie ani hranicu 64 KiB jedného stavu.
- Vykonateľný adaptér vyžaduje opätovný import alebo nie je dostupná izolácia
- Po zmene výpočtového prostredia importujte pôvodný úplný balík znova, aby sa overil pre aktuálnu verziu. Ak server nemá pripravené požadované izolované prostredie, operáciu odmietne. Zdrojový súbor, EXE ani DLL nie sú náhradnou cestou spustenia.
- Úložisko výpočtov je plné
- Vo Výpočtoch exportujte dôležité výsledky a potom odstráňte ukončené záznamy. Odstránenie adaptéra z knižnice neuvoľňuje miesto v serverovej histórii.
Ak aplikácia nehlási pripravený výpočtový modul, skontrolujte dostupnosť servera a pripojenie. Otvorenie samotného súboru HTML natívny výpočet nezabezpečí. Pri hlásení problému priložte export zadania, presný text chyby a postup jej vyvolania.
Vzhľad zmeníte ovládaním motívu v hlavičke. Zvuky zapnete alebo stíšite samostatným ovládaním Zvuky; ich nastavenie nemení dáta ani správanie výpočtu.
10. Prezrite si zdroj alebo vytvorte vlastné operátory
Zdroj vstavaného adaptéra
Voľba Kód adaptéra otvorí zdroj príslušného adaptéra. Pri uloženom výsledku použite Zdroj použitý vo výpočte, aby ste videli jeho zaznamenanú verziu. Zdrojový balík si môžete stiahnuť. Matematický model, operátorový program a Rust implementácia majú rozdielny obsah; prehliadač zdrojov uvádza ich druh.
Zdrojové súbory vstavaných natívnych adaptérov vysvetľujú ich reprezentáciu, hodnotenie a operátory. Neobsahujú implementáciu jadra. Ich stiahnutie a úprava ešte neznamenajú, že aplikácia prijme upravený súbor .rs ako vykonateľný adaptér. Na vlastné algoritmy použite niektoré z nasledujúcich rozhraní.
Vlastné operátory cez Customer Program SDK v1
Pomocou Customer Program SDK v1 opíšete vlastnú inicializáciu, hodnotenie, kontrolu výsledku a zmeny ohraničeného celočíselného, binárneho alebo permutačného vektora. Výpočtový modul tieto operácie skutočne vykonáva; nejde len o opisné názvy polí. Jazyk neposkytuje prístup k súborom, sieti ani procesom servera.
Otvorte príručku Program SDK s importovateľnými definíciami a samostatnými dátami. Začnite úplnou definíciou a malým prípadom s nezávisle overiteľným výsledkom. Po úprave operátora znovu skontrolujte platnosť reprezentácie, výsledné hodnoty a zaznamenanú prácu.
Vlastný adaptér v jazyku Rust s vykonateľným Wasm modulom
Rust SDK v1 poskytuje zostaviteľný projekt a dva príklady: kvadratické priraďovanie (QAP) a aproximáciu dát metódou najmenších štvorcov. Umožňuje vlastné dátové štruktúry, celočíselné aj reálne skóre, inicializáciu, operátory, celé lokálne hľadanie a podporované rozširujúce operácie.
- Stiahnite a rozbaľte projekt Rust SDK. Podľa jeho README upravte zdroj príkladu.
- Vo vlastnom vývojovom prostredí s Rustom a Node.js zostavte Wasm modul a vytvorte balík
.adapter.json. Aplikácia samotný zdroj Rustu nekompiluje. - Cez Importovať adaptér alebo zadanie načítajte vytvorený balík. Po úspešnej kontrole sa definícia objaví v knižnici Moje adaptéry.
- Dodajte dáta a spustite výpočet. Zmena kódu vyžaduje nové zostavenie a import; predchádzajúce výpočty si zachovajú svoju verziu.
Profil v1 vykonáva modul na CPU servera v povinnom izolovanom prostredí s limitmi pamäte, práce a celkového času. Neposkytuje hostiteľské importy, WASI, GPU služby, natívne knižnice ani prístup k súborom, sieti či procesom. Server zdrojové prílohy nekompiluje ani nespúšťa. Výkon interpretera sa môže líšiť od vstavaného natívneho adaptéra.
Ďalšie limity importovaného Rust/Wasm adaptéra
| Oblasť | Hranica |
|---|---|
| Zostavený Wasm modul | 512 KiB. |
| Celý importný balík | 4 MiB; zdrojové prílohy najviac 64 súborov a spolu 2 MiB. |
| Dáta v balíku | Predvolené dáta a každý priložený príklad najviac 64 KiB. |
| Dáta pri výpočte | Celé odoslané zadanie má najviac 128 KiB; dáta sa spolu s obálkou musia zmestiť aj do 128 KiB správy modulu. |
| Stav jedného kandidáta | 64 KiB v JSON. |
| Správa modulu | 128 KiB na požiadavku alebo odpoveď. Celá JSON odpoveď má najviac 8 192 počítaných hodnôt a kľúčov a hĺbku 40. Bežné polia JSON majú najviac 4 096 prvkov. |
| Pamäť modulu | 32 MiB na inštanciu, najviac štyri vyhľadávacie inštancie. Hranica 512 MiB platí pre celý proces vrátane jadra a interpretera. |
| Palivo interpretera | 50 miliónov jednotiek na volanie, 500 miliónov na spoločné vyhľadávanie a najviac ďalších 250 miliónov na čerstvú záverečnú validáciu. |
| Rozhranie a dávky | Najviac osem metrík, 32 rodín operátorov, 256 návrhov pohybov a 24 kandidátov na dávku; všetky sa zároveň musia zmestiť do limitu správy. |
| Súkromná knižnica balíkov | Najviac 32 uložených balíkov alebo verzií, spolu 64 MiB na reláciu. |
| Importovanie | 12 pokusov za 10 minút na reláciu vrátane neúspešných, najviac jeden súčasný import na reláciu a dva globálne. |
Jednotky paliva sú rozpočtom práce interpretera; nerovnajú sa CPU-sekundám ani presnému počtu zdrojových príkazov. Po dosiahnutí niektorej hranice môže adaptér skončiť skôr, než uplynie čas hľadania. Rozlišujte bežné vyčerpanie rozpočtu s overeným doterajším kandidátom a chybu vykonávania, pri ktorej sa platný výsledok nemusí zachovať. Všetky inštancie vyhľadávania sa uvoľnia pred vytvorením čerstvého záverečného validátora.
Na prenos vykonateľného adaptéra do inej inštalácie exportujte aj jeho úplný balík. Samotné zadanie alebo definícia môžu obsahovať iba odkaz na uložený modul. Pri vlastnom balíku aplikácia overuje identitu modulu a jeho rozhranie; priložený zdrojový text dodáva autor a automaticky sa nepotvrdzuje jeho zhoda so zostaveným modulom.
Pri každej ceste oddeľujte zmenu algoritmu od zmeny dát a opisných polí. Zrozumiteľný názov a pekný graf nenahrádzajú správne operátory, kontrolu podmienok ani overenie výsledku.