abonnement Unibet Coolblue Bitvavo
pi_62939116
Hallo,


Voor school ben ik bezig met een programma te maken dat een sudoku puzzel oplost. Opzich geen probleem denken de meeste, maar ik moet het dus maken met swi PROLOG.

Ik heb er nu vrij veel uren aan besteed en ben tot op heden nog niks opgeschoten.
Het programma zal de puzzel inductief moeten oplossen.
Uiteindelijk zal mijn programma er als volgt moeten uitzien (dit is geen prolog code)
sudoku(grid)
{
if (is_sudoku)
{
print_bord();
}
else
{
state_transiton(bord, hulpbord)
validate(hulpbord)
sudoku(hulpbord)
}
}

Kort gezegd:
Er wordt gekeken of het bord geheel klopt. Indien dat het geval is moet ik het bord printen.
Indien het niet het geval is, moet het programma een kopie maken van dat bord, vervolgens op een lege plek een nummer invullen en dat controleren. Vervolgens wordt de hele functie opnieuw aangeroepen en worden de stappen opnieuw uitgevoerd op het hulpbord.


Nu heb ik dus op dit moment na uren zoeken en kloten nog niks.
Ik heb meerdere problemen: er zijn meerdere voorbeelden beschikbaar maar ten eerste doen ze het niet en ten tweede gebruiken ze geen inductie.

Ik zou nu graag eens willen weten hoe ik een getal invul op een lege plek.
Stel ik heb een lijst [ 1,_,3,4,5,6,7,8,9], hoe vul ik een getal uit de verzameling 1,2,3,4,5,6,7,8,9 in op de lege plek (die met de underscore dus).

Alle hulp is welkom.
  dinsdag 4 november 2008 @ 19:10:48 #52
147503 Iblis
aequat omnis cinis
pi_62942397
Je doet het niet echt in Prolognotatie, zou ik zeggen; en dat geeft een beetje weg dat je logisch programmeren lastig vindt.

Een if/else constructie is een typische imperatieve constructie. In Prolog zou je zoiets doen:

Bord = [....],
Bereken(Bord, Oplossing),
Print(Oplossing).

Dat wil zeggen: Vindt mij een waarde voor oplossing die compatible is met Bord. En dan kun je definiëren hoe een oplossing eruit moet zien. Zo ook kun je niet echt een variabele ‘invullen’ in een lege plek in Prolog. Lijst-operaties worden gedefinieerd in termen van relaties. Deze lijst heeft een relatie met deze andere lijst.

Maar, je ‘weet’ niet echt welke variabele nog wel of niet ingevuld moet worden (zou ik zeggen), dus vandaar dat ik je aanpak een beetje vreemd vind. Het is veel gewoner om te zeggen (b.v.) ‘de eerste rij is een permutatie van de getallen 1 t/m 9 en verder geldt dat op plek 5 een 3 staat en op plek 8 een 9’, doe mij zo'n oplossing.

Dat is de logische manier waarop je je constraints schrijft in Prolog. Waarom is de inductie stap zo belangrijk, en moet het werkelijk per vakje in je bord gaan?

Je kunt echter wel zoiets doen:

1
2
3
4
5
6
7
8
9
inrange(X, M) :-
    numlist(1, 9, L),
    member(X, L),
    not(member(X, M)).

insert([],[]).
insert([N | L], [N | M]) :-
    insert(L, M),
    inrange(N, M).


Dit geeft b.v. als uitvoer:

1
2
3
4
5
6
7
8
?- insert([1,_,3,_,5,6,7,_,9], L).
L = [1, 8, 3, 4, 5, 6, 7, 2, 9] ;
L = [1, 4, 3, 8, 5, 6, 7, 2, 9] ;
L = [1, 8, 3, 2, 5, 6, 7, 4, 9] ;
L = [1, 2, 3, 8, 5, 6, 7, 4, 9] ;
L = [1, 4, 3, 2, 5, 6, 7, 8, 9] ;
L = [1, 2, 3, 4, 5, 6, 7, 8, 9] ;
false.


Dit zou je als een inductieve basis voor een rij kunnen proberen. Maar m.i. is de veel elegantere oplossing zo eentje als deze.
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
pi_62943184
Bedankt voor je uitleg. Mijn beschrijving was inderdaad niet in prolog notatie.
Ik heb er bij dit vak (genaamd intelligente systemen) gekozen om sudoko op te lossen. Dit moet in prolog gebeuren, daar er bij prolog logisch geprogrammeerd wordt.

Het voorbeeld wat ik heb gegeven is eigenlijk de start die de docent heeft gegeven om tot een goede oplossing te komen.

Nu ik jouw verhaal heb gelezen, beredeneer ik dat er in mijn code helemaal geen inductie hoeft te staan daar prolog zelf inductie al toepast. Helaas heb ik op dit moment geen tijd meer. Ik zal morgen een nieuwe reactie posten met een andere aanpak.
  dinsdag 4 november 2008 @ 19:47:20 #54
147503 Iblis
aequat omnis cinis
pi_62943634
quote:
Op dinsdag 4 november 2008 19:33 schreef Darow het volgende:
Bedankt voor je uitleg. Mijn beschrijving was inderdaad niet in prolog notatie.
Ik heb er bij dit vak (genaamd intelligente systemen) gekozen om sudoko op te lossen. Dit moet in prolog gebeuren, daar er bij prolog logisch geprogrammeerd wordt.

Het voorbeeld wat ik heb gegeven is eigenlijk de start die de docent heeft gegeven om tot een goede oplossing te komen.

Nu ik jouw verhaal heb gelezen, beredeneer ik dat er in mijn code helemaal geen inductie hoeft te staan daar prolog zelf inductie al toepast. Helaas heb ik op dit moment geen tijd meer. Ik zal morgen een nieuwe reactie posten met een andere aanpak.
Is dit je eerste ervaring met Prolog? Want dan is dit nog wel een uitdagende opdracht. Prolog werkt namelijk heel anders dan wat je (duidelijk) gewend bent. Het zoekt zelf alle mogelijkheden af tot een goede oplossing. Of eigenlijk, als je:

1
2
3
4
inrange(X, M) :-
    numlist(1, 9, L),
    member(X, L),
    not(member(X, M)).


zegt, dan staat hier: om te bewijzen dat de relatie inrange tussen een variabele X en een variabele M geldig is, moet je eerst bewijzen dat er een L is zodanig dat numlist(1, 9, L) waar is (nu, dat is niet zo moeilijk, want dat is de lijst [1,2,3,4,5,6,7,8,9], als je imperatief zou programmeren zou je gewoon L := [1,2,3,4,5,6,7,8,9] zeggen, maar zo werkt Prolog niet echt), dan moet gelden dat X in L zit, en verder moet gelden dat X niet in M zit. Als dat allemaal geldt, dan is inrange(X, M) waar.

Daarom zie je ook altijd dat Prolog true/false oplevert, en daarbij de waarden van de variabelen waarvoor dat geldt. Die uiteindelijke false bij mijn voorbeeld betekent dus 'er zijn geen andere opties te vinden'.

Voor het gehele bord zou je dus kunnen definiëren waar het bord aan moet voldoen, b.v.:

1
2
3
4
5
ingevuld_bord(D, B) :-
  voeg_getallen_in(D, B), 
  rijen_geldig(B),
  kolommen_geldig(B),
  blokjes_geldig(B).


Nu is dit waarschijnlijk geen efficiënte oplossing ,maar zo werkt het idee. Je specificeert wat moet gelden om het uiteindelijke ding waar te maken.
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
pi_62977224
Kan iemand mij vertellen:
waarom 70% alcohol wordt gebruikt om te desinfecteren (en niet 96%)

en voor mijn hypothese klopte dit niet (volgens mijn docent):
Gedestilleerd water reinigt het slechtste van de vier omdat bacteriën een celwand hebben en dus water opnemen waardoor ze strak gaan staan. Dit is eigenlijk een optimale situatie voor de bacteriën, door het poetsen met een doek met water transporteer je enkele bacteriën over op het desbetreffende doekje waar je mee schoon maakt.
Na verwachting zullen er veel bacteriën achterblijven op de letters a, e, u, o en o die wij testten.

we dat het geen planten zijn maar ze hebben wel degelijk een celwand maar daar was iets mee aan de hand, kan iemand ons hier mee op weg helpen?

(bronnen zouden ook handig zijn mits geraadpleegd)

Bedankt.
pi_63072112
Ik heb een vraag over Scheikunde en dan met betrekking tot redoxreacties.

als er staat: kijk of chloorwater reageert met een zinkchloride-oplossing, dan zijn er in de oplossing aanwezig: CL2, Zn2+, CL- en toch ook H20? ( chloorwater is immers chloor, opgelost in water). antwoordenboekje zegt dat er geen H20 aanwezig is en dat de reactie niet doorgaat, maar als er wel water aanwezig is ( wat mij logischer lijkt) dan gaat de reactie wel door en wordt het:
2 Cl2(g) + 2 H2O(l) --> 4 Cl- + O2(g) + 4H+ (aq)

wat klopt er nu? is er wel of geen water aanwezig en zo niet, waarom dan niet?
  dinsdag 11 november 2008 @ 19:29:24 #57
105018 Borizzz
Thich Nhat Hanh
pi_63137343
Volgens mij heb jij gelijk. Als er geen water is vindt deze reactie ook niet plaats. Ik denk eerder dat het probleem textueel is en niet scheikundig.
kloep kloep
pi_63184729
Ik heb een vraagje over integreren. Weet iemand hoe je deze oplost?
quote:
2
________

3 + 12t2
Ik vermoed dat het moet met
quote:
1
_____

1+t2
is de afgeleide van
quote:
arctan(t)
Iemand een idee?
  donderdag 13 november 2008 @ 11:09:44 #59
147503 Iblis
aequat omnis cinis
pi_63185090
Je vermoeden is juist.

Eerst maar eens 2/(3 + 12t2) = 2/3 * 1/(1 + 4t2). En dat is gelijk aan 2/3 * 1/(1 + (2t)2. Dan, om het netjes te doen, moet je substitutie toepassen: s = 2t, dan krijg je ds/dt = 2, ofwel dt = 1/2ds. Dat vul je allemaal in:



En dan reken je de integraal uit, en dat is dan 1/3*arctan(s), en dan vervang je s weer door 2t, dus: 1/3arctan(2t).
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
pi_63185099
quote:
Op donderdag 13 november 2008 10:56 schreef WyBo het volgende:
Ik heb een vraagje over integreren. Weet iemand hoe je deze oplost?
[..]

Ik vermoed dat het moet met
[..]

is de afgeleide van
[..]

Iemand een idee?
Ja. Plaats je vraag om te beginnen eens in het juiste topic.
  donderdag 13 november 2008 @ 11:17:56 #61
147503 Iblis
aequat omnis cinis
pi_63185305
quote:
Op donderdag 13 november 2008 11:10 schreef Riparius het volgende:
Plaats je vraag om te beginnen eens in het juiste topic.
Niet eens gezien. De titels lijken ook wel op elkaar.
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
  vrijdag 14 november 2008 @ 01:33:55 #62
144030 fusionfake
aint nuthin after that!
pi_63210421
quote:
Op zondag 9 november 2008 13:11 schreef kirsten. het volgende:
Ik heb een vraag over Scheikunde en dan met betrekking tot redoxreacties.

als er staat: kijk of chloorwater reageert met een zinkchloride-oplossing, dan zijn er in de oplossing aanwezig: CL2, Zn2+, CL- en toch ook H20? ( chloorwater is immers chloor, opgelost in water). antwoordenboekje zegt dat er geen H20 aanwezig is en dat de reactie niet doorgaat, maar als er wel water aanwezig is ( wat mij logischer lijkt) dan gaat de reactie wel door en wordt het:
2 Cl2(g) + 2 H2O(l) --> 4 Cl- + O2(g) + 4H+ (aq)

wat klopt er nu? is er wel of geen water aanwezig en zo niet, waarom dan niet?
in de oplossing is aanwezig Zn2+ , Cl-, H2O,

Kijk nu goed naar de reactie die jij geeft, Cl2 (g) , die g is de gas fase, en jij hebt Cl- (aq) (ionen dus)
de reactie die jij geeft verloopt dus niet. Dat zou chloor-gas en water zijn.
The whole problem with the world is that fools and fanatics are always so certain of themselves, and wiser people so full of doubt
pi_63241066
Ik heb 3 dingen waar ik niet uitkom, weet iemand wat er op de vraagtekens moet staan ?
1
2
3
4
Naam:                         Formule
mangaan(IV)nitraat          ?
         ?                        Sn(HSO4)2
         ?                        FeI3
  zaterdag 15 november 2008 @ 12:22:18 #64
75592 GlowMouse
l'état, c'est moi
pi_63241450
Ja hoor, dat weet ik wel. Maar je zegt dat dit de enige dingen zijn waar je niet uitkomt, dus ik denk dat je op zijn minst een vermoeden hebt van wat er moet komen. Post dat vermoeden eens en zeg waarom je twijfelt.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_63241511
1e vraagteken: Mn(NO3)3
2e vraagteken: tin(II)waterstofsulfaat
3e vraagteken: IJzertrijodide
  zaterdag 15 november 2008 @ 12:30:36 #66
75592 GlowMouse
l'état, c'est moi
pi_63241622
Bij 1: mangaan(IV) geeft aan dat de oxidatietoestand +4 is. Omdat het nitraation -1 heeft, moet je er daar 4 ipv 3 van hebben om het geheel neutraal te maken.
Bij 2: goed
Bij 3: bij een zout heb je voor zover ik mij herinner nooit de voorvoegsels di-/tri-/etc, omdat dat al logischerwijs voortvloeit uit de oxidatietoestanden. Enige waar je hier rekening mee moet houden, is dat er voor ijzer twee mogelijkheden zijn, en je net als bij tin nog iets achter ijzer moet zetten.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_63241763
1e: Mn(NO3)4
2e: IJzer(III)jodide
  zaterdag 15 november 2008 @ 12:41:17 #68
75592 GlowMouse
l'état, c'est moi
pi_63241834
juist
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_63242072
Hey Ik heb een vraagje over entropy H(X) en mutual information I(X;Y).
Laat zien dat R(X;Y;Z)=I(X;Y)-I(X;Y|Z) is invariant onder de verschillende permutaties van X,Y en Z.

Om te bewijzen dat R(X;Y;Z)=R(Y;X;Z) hoef ik alleen te bewijzen dat I(X;Y|Z)=I(Y;X|Z).

Hiervoor geldt
I(X;Y|Z)=H(X|Z)-H(X|(Y,Z)) dus entropy van X|Z min entropy van X gegeven Y EN Z.
Aangezien ik zo slecht ben in kansrekening weet ik niet hoe ik de laatste moet uitrekenen: H(X|(Y,Z))
verlegen :)
  zaterdag 15 november 2008 @ 12:58:14 #70
75592 GlowMouse
l'état, c'est moi
pi_63242169
teletubbies toch: je ziet toch het verschil toch wel tussen wiskunde en niet-wiskunde topics?
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_63242611
Dit is een kansrekening/informatica vraag dacht ik. Aangezien entropy is gedefinieerd voor random variabelen.
verlegen :)
  zaterdag 15 november 2008 @ 13:51:52 #72
75592 GlowMouse
l'état, c'est moi
pi_63243133
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_63243179
oh zoo:P ik wist niet dat er een aparte pagina was voor wiskunde!
Sorry
verlegen :)
  woensdag 19 november 2008 @ 21:08:05 #74
235552 Mr.Houdoe
Officiële Timur-fanboy
pi_63356780
Hoe ziet de reactievergelijking er uit als bariumfosfaat verdwijnt in zoutzuur?
Ik kijk in Binas 45 maar daar zie ik onder PO4 3- alleen bij Na+ en K+ een g staan.
Ik dacht eigenlijk dat het splitste in ionen maar dan klopt het weer niet want er staat een s bij barium en fosfaat

EDIT: Ik denk nu dat het ook een zuur-base reactie kan zijn, moment
Klopt het dan dat PO4,3- reageert tot H3PO4?
pi_63357839
quote:
Op woensdag 5 november 2008 18:40 schreef Opperkwal het volgende:
Kan iemand mij vertellen:
waarom 70% alcohol wordt gebruikt om te desinfecteren (en niet 96%)

en voor mijn hypothese klopte dit niet (volgens mijn docent):
Gedestilleerd water reinigt het slechtste van de vier omdat bacteriën een celwand hebben en dus water opnemen waardoor ze strak gaan staan. Dit is eigenlijk een optimale situatie voor de bacteriën, door het poetsen met een doek met water transporteer je enkele bacteriën over op het desbetreffende doekje waar je mee schoon maakt.
Na verwachting zullen er veel bacteriën achterblijven op de letters a, e, u, o en o die wij testten.

we dat het geen planten zijn maar ze hebben wel degelijk een celwand maar daar was iets mee aan de hand, kan iemand ons hier mee op weg helpen?

(bronnen zouden ook handig zijn mits geraadpleegd)

Bedankt.
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')