Zbierka - Viacúčelová optimalizácia 3D modelov: Rozdiel medzi revíziami

Zo stránky Parametrické a Generatívne 3D modelovanie
Bez shrnutí editace
Bez shrnutí editace
Riadok 90: Riadok 90:
     <div class="section">
     <div class="section">
         <h3>Záver</h3>
         <h3>Záver</h3>
         <p>Týmto cvičením sme si ukázali ako si dokážeme navrhnúť a vytvoriť vlastnú viacúčelovú optimalizáciu a vedieť s ňou vyriešiť vlastný problém, ktorý môže mať aj protichodné kritéria. Vieme na to využiť existujúce knižnice a aplikovať riešenie na výsledné modely.</p>
         <p>Týmto cvičením sme si ukázali ako si dokážeme navrhnúť a vytvoriť vlastnú viacúčelovú optimalizáciu a vedieť s ňou vyriešiť vlastný problém, ktorý môže mať aj protichodné kritéria. Vieme na to využiť existujúce knižnice a aplikovať riešenie na výsledné modely. Pre rozbehanie a prácu Blendera z Visual Studio Code potupujte podľa inštrukcii v tomto videu: [https://youtu.be/YUytEtaVrrc?si=Z5JsFinFzzHp3_Om Blender + VS Code]</p>
     </div>
     </div>
</div>
</div>

Verzia z 00:31, 7. máj 2024

   https://kempelen.dai.fmph.uniba.sk/design/images/4/4f/MOEA.stl

Viacúčelová optimalizácia 3D modelov

Trvanie:
1.5 hod
Náročnosť:
ťažký
Nástroje:
Blender

V predošlých úlohách sme sa naučili pracovať s prostredím Blender s použitím Pyhtonu. Teraz prechádzame do konceptu viacúčelovej optimalizácie, ktorú si vysvetlme a ukážeme. Definciou postačujúcou pre nás bude v tomto prípade, že viacúčelová optimalizácia je proces hľadania najlepších možných riešení pre viacero súčasne sledovaných cieľov alebo kritérií. Cieľom je nájsť také riešenia, ktoré predstavujú tzv. Pareto-optimálnu množinu, kde nie je možné zlepšiť jedno kritérium bez zhoršenia niektorého z ostatných kritérií. Ide o vyhľadávanie riešení pomocou kompormisu, ktoré vyvažujú protichodné požiadavky rôznych cieľov. Vo viacúčelovej optimalizácii nie je jedno jednoznačne najlepšie riešenie, ale skupina riešení, nazývaná Pareto-optimálna fronta, medzi ktorými musí rozhodovať užívateľ na základe preferencií alebo ďalších kritérií.


Zadanie úlohy

Cieľom tejto úlohy je oboznámiť sa s knižnicou platypus pre prácu s optimalizáciou, zistiť ako funguje taká optimalizácia, čo všetko na to potrebujeme, ktorá aspekty pri ladení musíme zohľadňovať, uvažovať o tom ako by sa takáto optimalizácia dala zovšeobecňovať. Taktiež si vo väčšom precvičíme prácu s Blenderom a Pythonom a načíme sa nové programátorksé praktiky. V našom prípade nám pôjde o to definovať takú optimalizáciu, ktorá by vyhovovala naším požiadavkám. V prípade optimalizácie 3D modelu pomocou ich modifikácie nám ide o hľadanie tých najoptimálnejších parametrov, ktoré nám umožnia objekt meniť tak aby spĺňal kritériá, ktoré naň kladieme.

Odkazy na materiály

V tejto sekcii nájdete odkazy na materiály, ktoré vám môžu pomôcť pri riešení daných problémov a naučia vás ako používať požívané nástroje:

  • Teória - rozcestník stručnej teórie pre koncepty, ktoré potrebujeme
  • Rozcestník dokumentácií Blendera - nájdete tu dokumentáciu pre vývojárov, používateľskú ríručku a aj Python API dokumentáciu
  • Python syntax - tu nájdete syntax a použitie jazyka Python s ukážkami použitia
  • Blender Python API - dokumentácia Python API v Blenderi - nájdete tu všetko čo sa týka programovania s Python API (s knižnicou bpy) v Blenderi
  • Platypus - dokumentácia knižnice platypus s ukážkami použitia

Inštrukcie

  1. Zapneme si nástroj Blender a nastavíme si prostredie ako sme sa naučili v predošlých úlohách - necháme si v scéne objekt kocky, prepneme sa do režimu "Scripting" a vytvoríme si tam súbor, do ktorého budeme písať kód.
  2. Môžeme si sksúiť pripomenúť prácu s knižnicou bpy z minulých úloh.
  3. Na tomto albo v teórii nájdeme príklad použitia knižnice platypus: príklad použitia platypus, príklad je stručne aj tu:
    from platypus import NSGAII, DTLZ2
    
    # define the problem definition
    problem = DTLZ2()
    
    # instantiate the optimization algorithm
    algorithm = NSGAII(problem)
    
    # optimize the problem using 10,000 function evaluations
    algorithm.run(10000)
    
    # display the results
    for solution in algorithm.result:
        print(solution.objectives)
    

    Tento kód si vieme spustiť v Pyhtone a v poli solution uvidíme výpis výsledkov optimalizácie problému DTLZ2. No my si budeme chcieť definovať vlastný problém a vlastnú funkciu, ktorá bude slúžiť na ohodnotenie parametrov, ktoré sa budeme snažiť optimalizovať.
  4. Optimalizovať budeme parametre meniace náš objekt. Týmito parametrami môže byť napríklad číslo škálovania objektu, alebo úroveň (levels) aplikácie modifikátora "Subdivision Surface." Skúsme si preto vymyslieť modifikácie, ktoré budeme chcieť aplikovať a vytvorme si k ním funkcie podobné funkciám, ktoré inicializujú modifikátori z minulých cvičení.
  5. Ďalej si definujeme problém. Potrebujeme si definovať počet parametrov a počet cieľov, ktoré chceme dosiahnuť. Ak by sme chceli napríklad zmenšiť objekt aj zmenšiť počet polygónov a mám pre to vytvorené modifikácie, problém by sme definovali ako Problem(2,2), pretože chceme definovať 2 ciele: zmenšenie objektu a zmenšenie počtu polygónov a chcem to dosiahnuť zmenou 2 parametrov - škálovanie a napríkald úroveň "decimate" modifikátora.
  6. Pre optimalizáciu slúži viac algoritmov, my si vyberieme NSGA-II.
  7. Tento optimalizačný algoritmus bude spúšťať našu fitness funkciu. Táto funkcia slúži na pridelenie ohodnotenia daným parametrom, ktoré náhodne algoritmus vygeneroval.
  8. Je potrebné navrhnť fitness funkciu tak aby správne ohodnocovala a škálovala vracané ohodnotaniea, ktoré zodpovedajú danému modelu a problému, ktorý riešime.

Testovanie a úpravy

Analyzujte či výsledky, ktoré váš optimalizačný algoritmus vracia sú relevantné a vieme ich zužitkovať, návrhy na vylšpeenie máme tu:

  • skúste zdokonaliť fitness funkciu tak, že definujte pre každý parameter samotnú ohodnocovaciu funkciu
  • skúste si odfiltrovať tie najlepšie a najhoršie ohodnotené riešenia optimalizačného algoritmu a vytvorit si podľa nich modely
  • pokúste sa navrhnúť optimalizáciu ďalšieho parametra, to zahŕňa: vytvorenie fitness funkcie, špecifikácia typu a rozsahu parametru (prípadne jeho mapovanie), vytvorenie funkcie, ktorá dané modifikácie na model aplikuje
  • vyskúšajte si importovať vlastný objekt a otestovať váš algoritmus na ňom

Spätná väzba

Ak ste spokojní so svojím algoritmom, prezentujte ho ostatným, zhodnoťte koncepty, ktoré ste použili a ako ste ho implementovali, buďte otvorení k hodnoteniam od ostatných a k prípadným návrhom na zlepšenie.

Vzorové riešenie

Ak budete potrebovať motiváciu alebo si skontrolovať váš výsledný model, v nasledujúcich odkazoch nájdete implementáciu daného modelu v nástrojoch, ktoré ste na implementáciu mohli použiť:

Záver

Týmto cvičením sme si ukázali ako si dokážeme navrhnúť a vytvoriť vlastnú viacúčelovú optimalizáciu a vedieť s ňou vyriešiť vlastný problém, ktorý môže mať aj protichodné kritéria. Vieme na to využiť existujúce knižnice a aplikovať riešenie na výsledné modely. Pre rozbehanie a prácu Blendera z Visual Studio Code potupujte podľa inštrukcii v tomto videu: Blender + VS Code