Manatoko ōkawa mā te tauira o te wuruhi, koati me te raruraru kāpeti

Ki taku whakaaro, i roto i te rängai reo Rūhia o te Ipurangi, ko te kaupapa o te manatokonga okawa kaore i te tino kapi, me te kore o nga tauira maamaa me te maamaa.

Ka hoatu e ahau he tauira mai i tetahi puna whenua ke, ka taapiri atu i taku ake otinga ki te raru rongonui o te whakawhiti i te wuruhi, te koati me te kāpeti ki tera taha o te awa.

Engari ko te tuatahi, ka whakaahua poto ahau he aha te manatokotanga okawa me te take e hiahiatia ana.

Ko te tikanga o te manatoko okawa ko te tirotiro i tetahi papatono, i te algorithm ranei ma te whakamahi i tetahi atu.

He mea tika tenei kia pai ai te whakahaere o te hotaka i runga i te whakaaro me te noho haumaru.

Ko te manatoko okawa te huarahi tino kaha ki te kimi me te whakakore i nga whakaraeraetanga: ka taea e koe te kimi kohao katoa me nga pepeke kei roto i tetahi papatono, ka whakaatu ranei kaore i te noho.
He mea pai kia mohiohia i etahi wa kaore e taea tenei, penei i te raruraru o nga kuini 8 me te whanui o te poari o te 1000 tapawha: ka heke katoa ki te matatini algorithmic, ki te raruraru whakamutu ranei.

Heoi, ahakoa he aha, ka whiwhi tetahi o nga whakautu e toru: he tika te kaupapa, he he, kaore ranei i taea te tatau i te whakautu.

Ki te kore e taea te kimi whakautu, he maha nga wa ka taea te mahi ano i nga waahanga maramara o te hotaka, me te whakaiti i te uaua o te algorithmic, kia whiwhi ai i te whakautu ae, kaore ranei.

A ka whakamahia te manatoko ōkawa, hei tauira, i roto i nga punaha whakahaere Windows kernel me Darpa drone, hei whakarite i te taumata teitei o te whakamarumaru.

Ka whakamahia e matou te Z3Prover, he taputapu tino kaha mo te whakamatau i te ariā aunoa me te whakaoti whārite.

I tua atu, ka whakatauhia e Z3 nga wharite, kaore e kowhiri i o raatau uara ma te whakamahi i te kaha.
Ko te tikanga ka taea e ia te kimi i te whakautu, ahakoa he 10^100 nga huinga o nga whiringa whakauru.

Engari he tekau ma rua noa nga tohenga whakaurunga o te momo Integer, a he maha nga wa ka kitea tenei i roto i nga mahi.

He raruraru mo te 8 kuini (I tangohia mai i te reo Ingarihi ā-ringa).

Manatoko ōkawa mā te tauira o te wuruhi, koati me te raruraru kāpeti

# We know each queen must be in a different row.
# So, we represent each queen by a single integer: the column position
Q = [ Int('Q_%i' % (i + 1)) for i in range(8) ]

# Each queen is in a column {1, ... 8 }
val_c = [ And(1 <= Q[i], Q[i] <= 8) for i in range(8) ]

# At most one queen per column
col_c = [ Distinct(Q) ]

# Diagonal constraint
diag_c = [ If(i == j,
              True,
              And(Q[i] - Q[j] != i - j, Q[i] - Q[j] != j - i))
           for i in range(8) for j in range(i) ]

solve(val_c + col_c + diag_c)

Ma te whakahaere Z3, ka whiwhi tatou i te otinga:

[Q_5 = 1,
 Q_8 = 7,
 Q_3 = 8,
 Q_2 = 2,
 Q_6 = 3,
 Q_4 = 6,
 Q_7 = 5,
 Q_1 = 4]

Ko te raruraru kuini he rite ki te hotaka e whakauru ana i nga taunga o nga kuini 8 me te whakaputa i te whakautu mena ka whiua e nga kuini tetahi ki tetahi.

Mena ka whakatauhia e matou he kaupapa pera ma te whakamahi i te manatokotanga okawa, ka whakatauritea ki te raru, me mahi ano tatou i tetahi atu taahiraa i roto i te ahua o te huri i te waehere hotaka hei wharite: ka puta he rite tonu ki a tatou ( o te akoranga, ki te i tuhia tika te hōtaka).

He rite tonu te ahua mo te rapu whakaraeraetanga: ka whakatauhia e matou nga tikanga whakaputa e hiahiatia ana, hei tauira, te kupuhipa a te kaiwhakahaere, te huri i te puna, i te waehere whakahiato ranei ki roto i nga wharite e hototahi ana ki te manatoko, katahi ka whiwhi whakautu mo te aha me hoatu nga raraunga hei whakaurunga ki te whakatutuki i te whainga.

Ki taku whakaaro, ko te raru mo te wuruhi, te koati me te kāpeti he tino pai ake, na te mea he maha nga (7) nga mahi hei whakaoti.

Mena he rite te raru o te kuini ki te keehi ka taea e koe te uru atu ki tetahi tūmau me te tono GET kotahi, POST ranei, na te wuruhi, koati me te kāpeti e whakaatu ana i tetahi tauira mai i te waahanga tino uaua me te whanui, ka taea anake te whakatutuki. na te maha o nga tono.

He rite tenei, hei tauira, ki tetahi ahuatanga e hiahia ana koe ki te kimi i te werohanga SQL, tuhia he konae ki roto, katahi ka whakanui i o motika katahi ka whiwhi kupuhipa.

Nga ahuatanga o te raruraru me tona otingaMe kawe e te kaiahuwhenua he wuruhi, he koati me te kāpeti ki tera taha o te awa. He poti ta te kaiahuwhenua ka taea e ia anake te whakauru i tetahi mea, haunga te kaiahuwhenua. Ka kai te wuruhi i te koati, ka kai te koati i te kāpeti mena ka waiho e te kaiahuwhenua ma te kore e tiaki.

Ko te otinga ko te taahiraa 4 me whakahoki e te kaiahuwhenua te koati.
Inaianei me timata taatau ki te whakaoti i te kaupapa.

Me tohu te kaiahuwhenua, te wuruhi, te koati me te kāpeti kia 4 nga taurangi e tango ana i te uara 0 anake, 1 ranei. Ko te tikanga ko te kore kei te taha maui, ko tetahi kei te taha matau.

import json
from z3 import *
s = Solver()
Num= 8

Human = [ Int('Human_%i' % (i + 1)) for i in range(Num) ]
Wolf = [ Int('Wolf_%i' % (i + 1)) for i in range(Num) ]
Goat = [ Int('Goat_%i' % (i + 1)) for i in range(Num) ]
Cabbage = [ Int('Cabbage_%i' % (i + 1)) for i in range(Num) ]

# Each creature can be only on left (0) or right side (1) on every state
HumanSide = [ Or(Human[i] == 0, Human[i] == 1) for i in range(Num) ]
WolfSide = [ Or(Wolf[i] == 0, Wolf[i] == 1) for i in range(Num) ]
GoatSide = [ Or(Goat[i] == 0, Goat[i] == 1) for i in range(Num) ]
CabbageSide = [ Or(Cabbage[i] == 0, Cabbage[i] == 1) for i in range(Num) ]
Side = HumanSide+WolfSide+GoatSide+CabbageSide

Ko te nama te maha o nga hikoinga hei whakaoti. Ko ia taahiraa e tohu ana i te ahua o te awa, te poti me nga hinonga katoa.

Inaianei, me whiriwhiri matapōkeretia, me te tawhē, tangohia te 10.

Ka whakaatuhia ia hinonga i roto i nga kape 10 - koinei tona uara i ia o nga hikoinga 10.

Inaianei me whakarite nga tikanga mo te timatanga me te whakaoti.

Start = [ Human[0] == 0, Wolf[0] == 0, Goat[0] == 0, Cabbage[0] == 0 ]
Finish = [ Human[9] == 1, Wolf[9] == 1, Goat[9] == 1, Cabbage[9] == 1 ]

Na ka whakatauhia e matou nga tikanga ka kainga e te wuruhi te koati, ka kai ranei te koati i te kāpeti, hei herenga i roto i te whārite.
(I te aroaro o te kaiahuwhenua, kare e taea te riri)

# Wolf cant stand with goat, and goat with cabbage without human. Not 2, not 0 which means that they are one the same side
Safe = [ And( Or(Wolf[i] != Goat[i], Wolf[i] == Human[i]), Or(Goat[i] != Cabbage[i], Goat[i] == Human[i])) for i in range(Num) ]

Ka mutu, ka whakatauhia e matou nga mahi katoa a te kaiahuwhenua i te whakawhiti ki reira, ki muri ranei.
Ka taea e ia te kawe he wuruhi, he koati, he kāpeti ranei, kaua ranei e mau ki tetahi, kaua ranei e rere ki hea.

Ko te tikanga, kaore e taea e tetahi te whakawhiti me te kore he kaiahuwhenua.

Ka whakaatuhia tenei ma te mea ka rereke nga ahuatanga o te awa, poti me nga hinonga mai i te waa o mua i roto i te huarahi tino iti.

Kaua e neke ake i te 2 moka, me te maha atu o nga rohe, na te mea ka taea e te kaiahuwhenua te kawe i tetahi hinonga i te wa kotahi, kaore e taea te noho tahi.

Travel = [ Or(
And(Human[i] == Human[i+1] + 1, Wolf[i] == Wolf[i+1] + 1, Goat[i] == Goat[i+1], Cabbage[i] == Cabbage[i+1]),
And(Human[i] == Human[i+1] + 1, Goat[i] == Goat[i+1] + 1, Wolf[i] == Wolf[i+1], Cabbage[i] == Cabbage[i+1]),
And(Human[i] == Human[i+1] + 1, Cabbage[i] == Cabbage[i+1] + 1, Wolf[i] == Wolf[i+1], Goat[i] == Goat[i+1]),
And(Human[i] == Human[i+1] - 1, Wolf[i] == Wolf[i+1] - 1, Goat[i] == Goat[i+1], Cabbage[i] == Cabbage[i+1]),
And(Human[i] == Human[i+1] - 1, Goat[i] == Goat[i+1] - 1, Wolf[i] == Wolf[i+1], Cabbage[i] == Cabbage[i+1]),
And(Human[i] == Human[i+1] - 1, Cabbage[i] == Cabbage[i+1] - 1, Wolf[i] == Wolf[i+1], Goat[i] == Goat[i+1]),
And(Wolf[i] == Wolf[i+1], Goat[i] == Goat[i+1], Cabbage[i] == Cabbage[i+1])) for i in range(Num-1) ]

Me whakahaere te otinga.

solve(Side + Start + Finish + Safe + Travel)

Na ka whiwhi tatou i te whakautu!

I kitea e Z3 he huinga ahua rite tonu e tutuki ana i nga tikanga katoa.
He momo maka wha-ahu o te waahi-wa.

Kia mohio tatou he aha te mea i tupu.

Ka kite tatou i te mutunga ka whiti katoa, i te tuatahi ka whakatau to tatou kaiahuwhenua ki te okioki, a, i nga hikoinga tuatahi e 2 kaore ia e kauhoe ki hea.

Human_2 = 0
Human_3 = 0

E tohu ana tenei he nui rawa te maha o nga whenua i whiriwhiria e matou, a, 8 ka tino rawaka.

I a matou nei, ko te mahi a te kaiahuwhenua: timata, okioki, okioki, whiti te koati, whiti whakamuri, whakawhiti i te kāpeti, hoki mai me te koati, whakawhiti te wuruhi, hoki mai ko ia anake, tukuna ano te koati.

Engari i te mutunga ka whakatauhia te raru.

#Старт.
 Human_1 = 0
 Wolf_1 = 0
 Goat_1 = 0
 Cabbage_1 = 0
 
 #Фермер отдыхает.
 Human_2 = 0
 Wolf_2 = 0
 Goat_2 = 0
 Cabbage_2 = 0
 
 #Фермер отдыхает.
 Human_3 = 0
 Wolf_3 = 0
 Goat_3 = 0
 Cabbage_3 = 0
 
 #Фермер отвозит козу на нужный берег.
 Human_4 = 1
 Wolf_4 = 0
 Goat_4 = 1
 Cabbage_4 = 0
 
 #Фермер возвращается.
 Human_5 = 0
 Wolf_5 = 0
 Goat_5 = 1
 Cabbage_5 = 0
 
 #Фермер отвозит капусту на нужный берег.
 Human_6 = 1
 Wolf_6 = 0
 Cabbage_6 = 1
 Goat_6 = 1
 
 #Ключевая часть операции: фермер возвращает козу обратно.
 Human_7 = 0
 Wolf_7 = 0
 Goat_7 = 0
 Cabbage_7 = 1
 
 #Фермер отвозит волка на другой берег, где он теперь находится вместе с капустой.
 Human_8 = 1
 Wolf_8 = 1
 Goat_8 = 0
 Cabbage_8 = 1
 
 #Фермер возвращается за козой.
 Human_9 = 0
 Wolf_9 = 1
 Goat_9 = 0
 Cabbage_9 = 1
 
 #Фермер повторно доставляет козу на нужный берег и завершают переправу.
 Human_10 = 1
 Wolf_10 = 1
 Goat_10 = 1
 Cabbage_10 = 1

Inaianei me ngana ki te whakarereke i nga tikanga me te whakamatau kaore he otinga.

Ki te mahi i tenei, ka hoatu e matou ta matou wuruhi otaota, a ka hiahia ia ki te kai kāpeti.
Ka taea tenei ki te whakataurite ki te keehi ko ta matou whainga kia mau i te tono me te whakarite kia kore he pokanoa.

 Safe = [ And( Or(Wolf[i] != Goat[i], Wolf[i] == Human[i]), Or(Goat[i] != Cabbage[i], Goat[i] == Human[i]), Or(Wolf[i] != Cabbage[i], Goat[i] == Human[i])) for i in range(Num) ]

I homai e Z3 te whakautu e whai ake nei:

 no solution

Ko te tikanga kaore he otinga.

No reira, i whakamatauhia e maatau te kore e taea te whiti me te wuruhi karekau he mate mo te kaiahuwhenua.

Mena ka kitea e te hunga whakarongo tenei kaupapa he pai, katahi ka korero atu ahau ki a koe me pehea te huri i tetahi hotaka noa, mahi ranei hei wharite ki nga tikanga okawa, me te whakaoti, na reira ka kitea nga ahuatanga tika me nga whakaraeraetanga katoa. Tuatahi, i runga i te mahi kotahi, engari ka whakaatuhia i roto i te ahua o te kaupapa, katahi ka whakararuraru haere i a ia me te neke haere ki nga tauira o naianei mai i te ao whanaketanga rorohiko.

Kua rite kē te tuhinga e whai ake nei:
Te hanga i tetahi punaha manatoko okawa mai i te wahanga: Te tuhi VM tohu ki te PHP me te Python

I roto i te reira neke ahau i te manatoko ōkawa o raruraru ki ngā hōtaka, me te whakaahua
me pehea te huri aunoa ki nga punaha ture okawa.

Source: will.com

Tāpiri i te kōrero