Ontwerpmodel voor semigesloten kassen

De semigesloten kas heeft zich stevig gevestgd in Nederland en verovert nu ook de rest van de wereld. Toch is er nog steeds veel discussie over het gedrag van het klimaat in de kas. Discussie is vaak een gevolg van een gebrek aan houvast. Om bedrijven die praktische houvast te bieden heb ik een model gemaakt. Het berekent de temperatuur en luchtvochtigheid in de hoogte, rekening houdend met buitencondities, ingeblazen lucht condities, plantverdamping en bladoppervlak over de hoogte. Een voorbeeld:

De semi gesloten kas gaat uit van het principe dat onderin droge (al of niet behandelde) lucht wordt geblazen. Er onstaat een opwaartse luchtstroming die ook het vocht naar boven ‘drukt’. Hier is natuurlijk aan gerekend met ingewikkelde CFD berekeningen, maar dat neemt eindeloos veel rekencapaciteit in beslag en is niet erg toegankelijk voor de gemiddelde ontwerper. Mijn model is dat wel. Het model is nu nog in een prototype fase, maar kan eenvoudig gefit worden op eigen meetdata, wat de uitkomsten natuurlijk in één klap sterk verbetert.

Dit ontwerpmodel is nu ook beschikbaar als web-apllicatie beta.

Meer weten of het model gebruiken? Neem contact op via info@studiohouthaak.nl

SIOM2.0 opgeleverd

Jaren geleden bedachten we bij TNO dat door de sterk toenemende export van Nederlands kassen er een behoefte zou ontstaan aan een beslissingsondersteunende tool bij het ontwerp van een glastuinbouw project. Niet veel later ben ik met een paar collega’s begonnen met een proefje om via een framework (IMB) wat eenvoudige (engineering) modellen met elkaar te laten praten. Het had wat weg van een film over computers in de jaren tachtig, met MS-DOS achtige scrollende teksten enzo. Al snel kreeg dit de naam SIOM, Systeem Integratie en Optimalisatie Model (gelukkig vertaalt het makkelijk in het Engels). Gaandeweg is dit, mede door de sterke interesse en betrokkenheid van de kassenbouwers -nu verenigd in Hortivation– uitgeroeid tot een serieuze ontwikkeling en de laatste jaren is het steeds meer een ‘gewoon’ Windows programma geworden. Het afgelopen jaar zijn de versies SIOM1.2 en SIOM1.5 door verschillende bedrijven getest. Afgelopen weken, hebben we in twee bijeenkomsten met kasontwerpers SIOM2.0 opgeleverd. Weer een grote stap. In SIOM2.0 kunnen bijvoorbeeld eenvoudig verschillende varianten met elkaar worden vergeleken: beslissingsondersteuning.

Ik ben blij dat ik, ondanks dat ik inmiddels geen TNO-er meer ben, heb mogen bijdragen aan het opleveren van SIOM2.0. Ik heb alle rollen gehad: uitvinder, modelleur, projectleider, onderzoeker, ontwikkelaar, accountmanager en consultant. Wat was het leukste? Uitvinden natuurlijk, maar iets afmaken geeft wel heel veel voldoening natuurlijk. Een mooi moment om het over te dragen naar mijn opvolgers. Ik dank alle TNO-collega’s voor de mooie samenwerking in al die jaren. Het was niet altijd makkelijk, en soms moesten we ronduit tegen de stroom inroeien, maar uiteindelijk staat er toch een solide programma met enorme potentie. En ik wens natuurlijk de gebruikers van SIOM veel succes met het gebruik van deze nieuwe versie. Dat er nog vele mogen volgen volgen!

Voor meer info over SIOM zie:
Hortivation
TNO

Project: ISSO86 transmissieberekening

Voor Bosman van Zaal heb ik hun transmissieberekening volgens ISSO86 opnieuw opgezet. Ze hadden natuurlijk al een prima Excel sheet, maar soms is het goed om de zaak even helemaal clean opnieuw op te zetten. Daardoor is hij gebruiksvriendelijker, beter te volgen, overzichtelijk en controleerbaar te printen (voor de klant) en weer helemaal volgens de laatste voorschriften. Dat werkt sneller en de kans op foutjes wordt daardoor ook kleiner. Op zich hadden ze dat natuurlijk zelf ook wel gekund, maar het moet dan tussen alle drukte (een goed teken overigens) door en bovendien ga je dan uit van het bestaande, in plaats van opnieuw te beginnen wat eigenlijk makkelijker is. Ik ben bovendien snel, dus ik denk dat het uiteindelijk goedkoper was.

Leuk bedrijf trouwens. Ze zoeken nog mensen…

12 december: Future Trends & Innovations in Horticulture Technology

Op het event Future Trends & Innovations in Horticulture Technology in het  World Horti Centre houd ik, namens TNO, een verhaal over mijn kindje: het Systeem integratie en Optimalisatie Model (SIOM), het beslissingsondersteunend model voor het ontwerp van  glastuinbouwprojecten wereldwijd. Hoe kan SIOM de export helpen?

Aanmelden: https://www.hortivation.nl/nl/schrijf-u-nu-in/

Programma

14:30 uur Inloop
15:00 uur Welkomstwoord Harm Maters vanuit de koepel PPS
15:10 uur Keynote Drs. W.N.J. (Bob) Ursem, wetenschappelijk directeur Botanische Tuin TU Delft

15:55 uur Korte pauze

16:10 uur Innovaties middellange termijn (5-10 jaar)
U kunt kiezen uit één van onderstaande sessies
I –   ICT innovaties: Smart Diary Farming & Data Driven Integrated Growing Systems
Nieuwe verdienmodellen ontstaan in hoog tempo doordat de ontwikkelingen in de informatie- en communicatietechnologie elkaar snel opvolgen. De voorbeelden ziet u dagelijks om u heen. Deze twee sprekers zullen u prikkelen met voorbeelden uit het heden en zullen u inspireren met mogelijkheden in de toekomst. Wat heeft Smart Diary Farming voor inzichten opgeleverd? Wat zijn de plannen rondom Data Driven Integrated Growing Systems? Ook u zult ongetwijfeld wensen hebben met betrekking tot het vergaren van informatie. Welke ICT en big data wensen staan op uw verlanglijstje?
II-   Phenotyping
PhenoKey noemt zichzelf ‘functioneel architect’ met een focus op hightech automatiseringsoplossingen voor bedrijven en instellingen in het crop science domein. Altijd met de focus op het automatiseren van processen en deze meer data gedreven te maken. PhenoKey ontwerpt deze oplossingen vanuit de behoeften van de klant en realiseert deze door bestaande technische bouwstenen uit verschillende industrieën te combineren, zoals technieken uit de tuinbouw, mijnbouw, automotive en offshore. Inzicht in de beschikbare technieken en toepassingen die gebruikt (kunnen) worden is noodzakelijk om een visie te delen over welke technieken en toepassingen naar verwachting van belang kunnen worden in de professionele glastuinbouw. Laat u inspireren door deze spreker.
III – Verwachtingen printbare elektronica in tuinbouwsector en vertical farming
Met behulp van diverse voorbeelden schetst deze spreker de ontwikkeling van printbare elektronica. Van printbare zonnecellen tot printbare sensoren en LED lampen. Hoe gaat deze techniek zich ontwikkelen? Wat zijn de mogelijkheden voor de tuinbouwsector? Aan welke nieuwe toepassingen kunt u denken? Herman Schoo is een expert in dit gebied en zal de verwachtingen voor de komende vijf tot tien jaar schetsen. Ook wordt het Interreg project Grow! uitgelegd. Dit project biedt een eerste verkenning van de mogelijkheden in de tuinbouwsector en vertical farming.

16:50 uur Korte pauze & wisselmoment

16:55 uur Innovaties korte termijn (1-5 jaar)
U kunt kiezen uit één van onderstaande sessies
I –   GPS data: revolutie voor wereldwijde kassenbouw
Heeft u enig idee welke rekenmodellen er op dit moment beschikbaar zijn voor toeleveranciers? En hoe er wordt samengewerkt in de sector om te komen tot vernieuwende rekenmodellen. Deze twee sprekers zullen uitlichten hoe preconcurrentiële samenwerking kan leiden tot innovaties. Hierbij kunt u denken aan de integratie van verschillende modellen, ontwikkelingen op het gebied van normalisatie en alternatieve manieren om belastingen te bepalen met behulp van satelliet- en meteodata. Maurice Hartman van Technokas licht toe wat deze samenwerkingsvorm voor zijn bedrijf betekent en wat het hem oplevert. 
II –  Hoe SIOM het Nederlandse exportproduct kan vergroten?
Tuinbouwkassen zijn een belangrijk exportproduct van Nederland. TNO voorziet de sector al jaren van rekentools om efficiënte kassen te kunnen ontwerpen. De laatste ontwikkeling is SIOM, een beslissingsondersteunend model om kassenbouwers en investeerders in staat te stellen optimale kasconcepten te kunnen ontwerpen in het buitenland. Het model maakt de consequenties van ontwerpbeslissingen inzichtelijk. Hiermee zijn kassenbouwers en investeerders in staat sneller, nauwkeuriger en kwalitatief betere kassen te ontwerpen. Ook geeft SIOM waardevolle informatie over aspecten als terugverdientijden, bedrijfsresultaat en efficiëntie van verschillende ontwerpvarianten. Leonard Baart de la Faille en Theo Sanders vertellen de toekomstige mogelijkheden van SIOM en bieden u de mogelijkheid zich aan te melden voor een ontwikkelgroep waarin TNO samen met de bedrijven SIOM verder gaat ontwikkelen
III – Precies voldoen aan de klantvraag met precisietuinbouw
Precisietuinbouw maakt gebruik van sensorsystemen, kunstmatige intelligentie, precisietechniek en management support systemen met als doel precies te weten hoe het er op plantniveau bij staat. Erik Pekkeriet vertelt: „Als we voor elke plant weten wat nodig is aan input aan bemesting, bescherming en klimaat, kunnen we dat ook gaan bieden. Door tussentijds de groei te volgen, weten we ook beter wat er uiteindelijk geleverd gaat worden en kunnen we de groei en kwaliteit koppelen aan de klantvraag.” Wat kan er op dit moment al? En wat kunnen we verwachten? Binnen het project precisietuinbouw worden actuele ontwikkelingen zoals Big Data, Deep Learning en Internet-of-things ook onderzocht. 

17:35 uur Borrel
17:45 uur Start Rondleiding (Optioneel)
18:00 uur Buffet
19:00 uur Einde

Solving a Sudoku with a Genetic Algorithm

Why would you want so solve a Sudoku with a Genetic Algorithm? That’s a fair question. Much easier would be to google on solving Sudoku’s and you’d probably have a method in 10 minutes. Like this one.

Okay, but suppose we didn’t know anything about sudoku’s (only the rules), or -more likely- we would have a slightly different problem, where googling wouldn’t help? Get it? ‘Because we can’ is also valid I think, though. Besides, I wanted to test my solving problem solving (no error) skills. If you’re relatively new to GA, it may help you understand.

Here’s a 4 star sudoku (I have not tested extensively with other sudoku’s)

(source www.sudokunet.nl)

First we have to define a Sudoku in Python. A list of integers is the easiest thing. One could argue for a 2D matrix (array), but this doesn’t add much. Besides, it makes implementing a Genetic Algoritmn complicated, because generally a genome is a 1D thing. Pyevolve has a lot more options for 1D lists that for 2D.

# define sudoku problem. 0's have to be filled
sudoku=[
0,0,6,0,0,0,0,0,0,
0,8,0,0,5,4,2,0,0,
0,4,0,0,9,0,0,7,0,
0,0,7,9,0,0,3,0,0,
0,0,0,0,8,0,4,0,0,
6,0,0,0,0,0,1,0,0,
2,0,3,0,6,7,9,8,1,
0,0,0,5,0,0,0,4,0,
4,7,8,3,1,9,5,6,2]

Now let’s implement the rules (one of each number in a row, column and block). I’ve added three functions to give me the rows, columns an blocks:

def row(sd,rijnum):
    #function that returs a list consisting of row
    row=[]
    for index in range(9):
        row.append(sd[rijnum*9+index])
    return row

def column(sd, columnnum):
    #returns column
    column=[]
    for index in range(9):
        column.append(sd[index*9+columnnum])
    return column

def block(sd,blocknum):
    #returns block numbered form left to right and then down
    block=[]
    blockstart=int(blocknum/3)*9*3+(blocknum-int(blocknum/3)*3)*3
    for indexX in range(3):
        for indexY in range(3):
            block.append(sd[blockstart+indexX*9+indexY])
    return block

def errors(sdsol):
    #this is the fitness function. No errors means the solution
    err=0
    for index in range (9):
        for element in [row(sdsol,index),column(sdsol,index),block(sdsol,index)]:
            for getal in [1,2,3,4,5,6,7,8,9]:
                # check on double numbers
                if (element.count(getal))>1:
                    err+=element.count(getal)-1

    for i,getal in enumerate(sdsol):
        # check on numbers that don't match the startnumbners
        if getal!=sudoku[i] and sudoku[i]!=0:
            err+=2
    return err

That’s all for the Sudoku. Note that the errors function, an implementation of the rules, is also the fitness function for the genetic algorithm.

The brilliant thing about Python is all the libaries. Why re-invent it all ourselves? I’m using Pyevolve here.

Now, a genome (81 numbers) represents a possible solution. A genome is a list containing inputs for the fitness function. If you don’t understand this, you might want to read some more basics on GA first. It may be full of errors (double numbers), doesn’t matter, we’ll let the error function deal with that. Keeping the numbers between 1 and 9 helps the search speed. This is all there is to it, the code pretty much explains itself (considering you know the basics of GA):

genome = G1DList.G1DList(81) #defining the genome as a list of 81 integers
genome.setParams(rangemin=1,rangemax=9)
genome.evaluator.set(errors) #sets fitness function to errors
genome.setParams(bestrawscore=0.00, rounddecimal=2)
ga = GSimpleGA.GSimpleGA(genome)
ga.setMinimax(Consts.minimaxType["minimize"]) #0 errors wanted
ga.setMutationRate(0.04)
ga.setGenerations(10000)
ga.setPopulationSize(200)
ga.setCrossoverRate(1)
ga.setElitismReplacement(5)
ga.terminationCriteria.set(GSimpleGA.RawScoreCriteria)
ga.evolve(freq_stats=10)

print ga.bestIndividual()

Were trying to “minimze” the errors of course and if it is 0, we can stop (terminationCriteria). Now, the most important lesson for me was that a GA takes tuning. What’s your population size? What’s the crossover method? Probably the most used method is single point crossover, but does this work here? The mutation rate is also important. Too high will result in slow search and to low means you might not reach the solution in 10000 generations. Try some numbers if you like.

Here’s the result.

>>>
Gen. 4270 (42.70%): Max/Min/Avg Fitness(Raw) [17.68(23.00)/9.48(0.00)/14.73(14.73)]
Total time elapsed: 99.557 seconds.
- GenomeBase
	Score:			 0.000000
	Fitness:		 9.482771
...

- G1DList
	List size:	 81
	List:		 [
6, 3, 8, 2, 5, 9, 7, 1, 4,
2, 5, 9, 7, 1, 4, 6, 3, 8,
7, 1, 4, 6, 3, 8, 2, 5, 9, 
3, 6, 2, 8, 9, 5, 1, 4, 7, 
8, 9, 5, 1, 4, 7, 3, 6, 2, 
1, 4, 7, 3, 6, 2, 8, 9, 5, 
5, 8, 6, 9, 2, 3, 4, 7, 1, 
9, 2, 3, 4, 7, 1, 5, 8, 6, 
4, 7, 1, 5, 8, 6, 9, 2, 3]

It took my laptop 100 seconds at best. Better that human, but many times worse than a proper Sudoku solving routine. I did not expect it to be fast, I was just wondering if I could make it work. And I forced myself not to Goole for it, until it worked. Of course people did it before me. But it looks like mine is doing quite well. On multiple runs, the time can differ a lot though, and sometimes it will not find it at all. I guess the algorithm runs into a local optimum and mutation is the only way to get it out again. It seems attractive  to raise the mutation rate, but if you raise it a bit to much, multiple genes in a single genome will change and that will set you back. I think the thing to do would be, to have multiple populations and migration between the populations. Where have I heard that before? I’ll try that some other time.