Archiv Prosinec, 2009

Vlastní primitivní IOC kontejner v C#

IOC kontejner je komponenta, která vychází z principů Inversion of control a Dependency Injection.Slouží k minimalizaci vztahů tříd z různých vrstev programu.

Ve zkratce jde o to , že se objekty nevytváří ve třídách, ale žádámě o ně komponentu, která má instancování na starosti(IOC kontejner).Klient tedy požádá kontejner o třídu implementující požadované rozhraní a od komponenty se mu vrátí třída.jakou třídu vybere je čistě na komponentě, důležité ale je aby implementovala požadované rozhraní.

Já jsem si připravil rozhraní   IObjectFactory, které obsahuje jedinou metodu a to   IBLLBase GetCRUD(Type bll) . Metoda GetCRUD  má jako vstupní proměnnou Typ rozhraní  a vrátí Objekt, který implementuje rozhraní IBLL,  což je rozhraní, které v mém případě implementují všechny servisní třídy.

Způsob, jakým to komponenta udělá je čistě na její implementaci.Já jsem si zvolil uložení dvojic Interface-Třída v konfigurčním souboru.Využiji zde konfiguračních možností prostředí .net a vytvořím si vlastní  konfigurační sekci web.configu, kterou budu mít v externím souboru ObjectBuilder.config.Ukázka  struktury je zde :

<objectBuilder
apiNamespace=“EpimexWebSite.Model.Repository.EntityRepositories.API“
implNamespace=“EpimexWebSite.Model.Repository.EntityRepositories.IMPL“
>
<Items>
<addType interfaceToLoad=“ICompanyRepository“
classToLoad=“CompanyRepository“/>

<addType interfaceToLoad=“IMachineRepository“
classToLoad=“MachineRepository“/>

<addType interfaceToLoad=“IGalleryRepository“
classToLoad=“GalleryRepository“/>

<addType interfaceToLoad=“IImageRepository“
classToLoad=“ImageRepository“/>

</Items>

</objectBuilder>

ukázka návrhu tříd kontejneru zde:


kostra XMLBasedObjectFactory:

a hlavní metoda Registrující objekty z Konfigurace

a nakonec sekvenční diagram znázornující komunikaci mezi aspx bázovou třídou a kontejnerem

Reklamy

EAM – fitness funkce

Fitness funkce obecně

Fitness funkce je přiřazení, které každému jednomu řešení gentického algoritmu (Chromosomu) přiřadí ohodnocení.Čím je jeho hodnota vyšší, tím je chromosom kvalitnější (Blížíme se k hledanému řešení).

Fitness funkce v případě EAM

Protože se snažíme najít souřadnice bodu, který je přesně uprostřed bunky na bitmapě, musíme nějakým způsobem spojit Chromosmy, které obsahují pouze zakodované XY hodnoty s prozkoumávanou bitmapou.Jediným pojítkem algoritmu s prostředím (bitmapou) je Fitness funkce.Potřebujemě nějakým způsobem zjistit,  jestli bod na pozici XY leží uprostřed buňky nebo vedle,  nejlépe s určitou tolerancí.

Prvním návrhem bylo zavést fitness funkci jako součet všech pixelů, které měli barvu přibližně stejnou jako hledaná buňka a to ve čtverci o délce strany shodné s hodnotou R chromosomu a XY souřadnicemi středu odpovídajícimi X a Y hodnotám chromosomu.

protože jsou ale buňky  občas uprostřed prosvětlené, zavedl jsem zatím fitness funkci  jako „rám“ okolo středu – počítá se tak pouze se čtvercem bez vnitřního čtverce  menším půměru – případné středové prosvětlení nám nezkreslí fitness ohodnocení

Na obrázku je takový rám znázorněný bílou barvou a je u něj uvedena jeho fitness hodnota.

EAM – zakodování chromozomů

Základní jednotkou genetického algoritmu je gen, což je nějakým způsobem zakodovaná informace.Může to být XY souřadnice bodu,X souřadnice v grafu nebo hrana grafu.Druhou důležitou entitou je chromosom, který se skládá z několika genů.V našem případě je architektura nastavená tak, že jeden Chromosom představuje hledané řešení (každý chromosom představuje tím kvalitnější řešení, čím je jeho fitness hodnota větší).

Chromosom se skládá ze 3 devítibitových hodnot (genů) a to

  • X souřadnice
  • Y souřadnice
  • R – délka strany čtverce

náš chromosom má tedy 3*9 =27 bitů a maximální velikost zpracovávané bitmapy je tedy 2 na devatou *2  = 1024bitů tzn maximální velikost bitmapy krevního rozboru je 1024 x 1024.

EAM – znázornění algoritmu

BPMN diagram popisující genetický algoritmus vytváření nových generací.Algoritmus zatím neobsahuje stop podmínky v případě, že bude nalezeno řešení brzy, tudíž algoritmus proběhne tolikrát, kolikrát mu to určíme v konfiguraci aplikace.

EAM – screen

Screen ze softwaru.

Graf vývoje populace.Modrý je vítězný chromosom, červený je aritmetický průměr generace

EAM – objektový návrh

Populační fasáda zastřešující  třídy evolučního algoritmu.S touto třídou komunikuje GUI a získává od ní výsledky.Klient má na výběr použití standartní třídy PurePopulationFacade nebo wrapperu PopulationFacadeHillClimbing.Ten agreguje třídu PurePopulationFacade a v metodě FindSolution k ní přidává funkčnost gradientního algoritmu pro optimalizaci řešení.

Další důležitý balíček tříd je Fitness.Ten se zabývá výpočty Fitness funkce kterou je možné dynamicky vyměnovat.Aktuálně se pracuje se třídami pro fitness funkci jako čtverec a „rám“ – čtverec bez vnitřního čtverce o menším rozměru.Tyto třídy jsou napsány ve  verzi používající klasickou metodu Bitmap.getPixel – pomalé a také ve verzi pracující s pointry

Balíček zastřešující samotný genetický algoritmus se jmenuje Algorithm.Algoritmus musí být modifikovatelný, proto je použito rozhraní IGAAlgorithmBase, které předepisuje pouze jednu metodu pro získání nové populace.Dále je použita abstraktní třída GAAlgorithmBaseTemplate s template metodou pro vytvoření nové populace a nyní pouze jediná třída která tuto abstraktní třídu a rozhraní implementuje – RoulleteSelectionGA.

Hello world!

Welcome to WordPress.com. This is your first post. Edit or delete it and start blogging!