TreeExplorer: investigate logical contradiction in this design

We get conflicting goals here:
 - either the child expansion happens within the opaque source data
   and is thus abstracted away
 - or the actual algorithm evaluation becomes aware of the tree structure
   and is thus able to work with nested evaluation contexts and a local stack
This commit is contained in:
Fischlurch 2017-12-15 00:32:30 +01:00
parent 30775b2b32
commit 53efdf6e2b
2 changed files with 138 additions and 16 deletions

View file

@ -152,15 +152,20 @@ namespace test{
size_t cnt_;
char letter_;
static char
// static
char
rndLetter()
{
return 'A' + rand() % 26;
static _Fmt fmt{"rLet(%0d < %0d) → %s"};
char ll = 'A' + rand() % 26;
cout << fmt % cnt_ % lim_ % ll <<endl;
return ll;
// return 'A' + rand() % 26;
}
public:
RandomSeq(size_t len =std::numeric_limits<size_t>::max())
: lim_{len}
RandomSeq(int len =0)
: lim_{len>=0? len : std::numeric_limits<size_t>::max()}
, cnt_{0}
, letter_{rndLetter()}
{ }
@ -915,8 +920,8 @@ namespace test{
{
// Layer-1: the search space with "hidden" implementation
using DataSrc = IterExploreSource<char>;
DataSrc searchSpace = treeExplore(RandomSeq{})
.expand([](char){ return RandomSeq{15}; })
DataSrc searchSpace = treeExplore(RandomSeq{-1})
.expand([](char){ return RandomSeq{4}; })
.asIterSource();
// Layer-2: State for search algorithm
@ -940,7 +945,7 @@ namespace test{
};
// Layer-3: Evaluation pipeline to drive search
string toFind = util::join (treeExplore (RandomSeq{5}));
string toFind = util::join (treeExplore (RandomSeq{5}), "");
cout << "Search in random tree: toFind = "<<toFind<<endl;
auto theSearch = treeExplore(State{searchSpace, toFind})
@ -949,18 +954,28 @@ namespace test{
State childState{state};
state.src.expandChildren();
childState.protocol.push_back(0);
++childState.pos;
++(childState.pos);
return childState;
})
.filter([](auto& iter)
.filter([](auto& it)
{
State& state = *iter;
while (state.pos < state.toFind.size()
and *state.src == state.toFind[state.pos])
iter.expandChildren();
while (it->pos < it->toFind.size() - 1
and *(it->src) == it->toFind[it->pos])
{
cout <<"|!| expand "<<materialise(it->protocol)<<endl;
it.expandChildren();
cout <<"|.| "<<*(it->src)<<" -->> "<<materialise(it->protocol)<<endl;
}
return state.pos == state.toFind.size();
// return *state.src == state.toFind[state.pos];
if (*(it->src) == it->toFind[it->pos])
return true;
else {
cout << "|↯| "<<*(it->src)<< " ... " <<materialise(it->protocol)<<endl;
return false;
}
});

View file

@ -5151,7 +5151,7 @@
<linktarget COLOR="#585e9d" DESTINATION="ID_845080696" ENDARROW="Default" ENDINCLINATION="-101;761;" ID="Arrow_ID_402051988" SOURCE="ID_1359727169" STARTARROW="None" STARTINCLINATION="208;5;"/>
<linktarget COLOR="#83dfc7" DESTINATION="ID_845080696" ENDARROW="Default" ENDINCLINATION="-1109;3887;" ID="Arrow_ID_1645152965" SOURCE="ID_30857289" STARTARROW="None" STARTINCLINATION="2051;-176;"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1511571446467" FOLDED="true" ID="ID_1778455053" MODIFIED="1512955522174" TEXT="expand-Operation">
<node COLOR="#338800" CREATED="1511571446467" FOLDED="true" ID="ID_1778455053" MODIFIED="1513293453942" TEXT="expand-Operation">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1511227813712" ID="ID_1961708112" MODIFIED="1512927037831" TEXT="Fall-1">
<icon BUILTIN="button_ok"/>
@ -5889,7 +5889,7 @@
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1512363286920" FOLDED="true" ID="ID_1420123769" MODIFIED="1512955528973" TEXT="Zusammenspiel">
<node COLOR="#338800" CREATED="1512363286920" ID="ID_1420123769" MODIFIED="1513293456202" TEXT="Zusammenspiel">
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1512844805995" ID="ID_927486947" MODIFIED="1512927037825" TEXT="single-val">
<icon BUILTIN="help"/>
@ -6206,6 +6206,38 @@
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1513293471929" ID="ID_1115016372" MODIFIED="1513293478704" TEXT="chained expansion">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1513293488863" ID="ID_263549307" MODIFIED="1513294184112" TEXT="logisches Problem mit layered expansion">
<linktarget COLOR="#9c5265" DESTINATION="ID_263549307" ENDARROW="Default" ENDINCLINATION="189;145;" ID="Arrow_ID_1920033917" SOURCE="ID_1013175212" STARTARROW="None" STARTINCLINATION="1219;0;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1513293497774" ID="ID_115807287" MODIFIED="1513293568808" TEXT="der unterste Expander nivelliert die Baumstruktur"/>
<node CREATED="1513293570748" ID="ID_34081800" MODIFIED="1513293626048" TEXT="dar&#xfc;ber gesetzte Expander bekommen das Schlie&#xdf;en des nested scope nicht mit"/>
<node CREATED="1513293655896" ID="ID_1685869664" MODIFIED="1513293665067" TEXT="dies konterkariert das Bestreben nach Abstraktion"/>
</node>
<node CREATED="1513293768322" ID="ID_1803494848" MODIFIED="1513293899233" TEXT="Idee: slave Expander">
<icon BUILTIN="idea"/>
<node CREATED="1513293775257" ID="ID_1165347300" MODIFIED="1513293781468" TEXT="registriert sich als Listener"/>
<node CREATED="1513293782224" ID="ID_1860640469" MODIFIED="1513293845843" TEXT="geht mit expand / backtrack mit"/>
<node CREATED="1513293889809" ID="ID_277229668" MODIFIED="1513293895109" TEXT="Wirkung unklar">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1513293901848" ID="ID_1292422466" MODIFIED="1513293907323" TEXT="Modell-1">
<node CREATED="1513293916558" ID="ID_1801870591" MODIFIED="1513293922177" TEXT="hat selber einen Stack"/>
<node CREATED="1513293941227" ID="ID_1085854477" MODIFIED="1513293947030" TEXT="erzeugt kopierten Zustand"/>
</node>
<node CREATED="1513293910591" ID="ID_308120385" MODIFIED="1513293913866" TEXT="Modell-2">
<node CREATED="1513293959848" ID="ID_227867197" MODIFIED="1513293968451" TEXT="reine Callbacks"/>
<node CREATED="1513293996403" ID="ID_770475649" MODIFIED="1513294007637" TEXT="2.Callback zum Schlie&#xdf;en notwendig"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1513294052460" ID="ID_803702364" MODIFIED="1513294117121" TEXT="Technik">
<icon BUILTIN="help"/>
<node CREATED="1513294056627" ID="ID_1384622700" MODIFIED="1513294063006" TEXT="Listener-Interface"/>
<node CREATED="1513294065442" ID="ID_1460481832" MODIFIED="1513294078644" TEXT="Listener als Decorator-chain"/>
<node CREATED="1513294087167" ID="ID_936833682" MODIFIED="1513294097217" TEXT="BaseAdapter wird Informations-Hub"/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1511837384749" FOLDED="true" ID="ID_274979743" MODIFIED="1512955532124" TEXT="asIterSource">
<icon BUILTIN="button_ok"/>
@ -7053,6 +7085,81 @@
<node CREATED="1513207165088" ID="ID_529012246" MODIFIED="1513207191511" TEXT="Nichtdeterminismus, aber 99.9999% Erfolgs-Chancen"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1513218546828" HGAP="-37" ID="ID_570463763" MODIFIED="1513218608169" TEXT="konkret..." VSHIFT="37">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1513218561938" ID="ID_1431731183" MODIFIED="1513218616291" TEXT="randomTree bauen">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1513218569000" ID="ID_973922179" MODIFIED="1513218617435" TEXT="Zustands-Typ bauen">
<icon BUILTIN="flag-yellow"/>
</node>
<node CREATED="1513218582175" ID="ID_1963772553" MODIFIED="1513218620609" TEXT="Probleme">
<icon BUILTIN="messagebox_warning"/>
<node COLOR="#338800" CREATED="1513218627121" ID="ID_1077327965" MODIFIED="1513284086498" TEXT="Bottom-Error">
<arrowlink COLOR="#179a76" DESTINATION="ID_474013760" ENDARROW="Default" ENDINCLINATION="513;33;" ID="Arrow_ID_1289625747" STARTARROW="None" STARTINCLINATION="426;-150;"/>
<icon BUILTIN="button_ok"/>
<node CREATED="1513218635200" ID="ID_418877787" MODIFIED="1513218650010" TEXT="beim Materialisieren der Random-Target-Sequenz"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1513218664652" ID="ID_606716798" MODIFIED="1513218676051" TEXT="join kopiert einmal zu viel">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1513218677962" ID="ID_533421172" MODIFIED="1513218685429" TEXT="Ha! in der For-Schleife"/>
<node CREATED="1513218687113" ID="ID_108639825" MODIFIED="1513218698203" TEXT="der Iter ist benannt, also wird kopiert"/>
<node CREATED="1513218699103" ID="ID_645074355" MODIFIED="1513218715465" TEXT="ENABLE_IN_STD_FOR_LOOP">
<icon BUILTIN="help"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1513218716941" ID="ID_1490164328" MODIFIED="1513218724549" TEXT="ist das so korrekt?">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1513218727603" ID="ID_1592038855" MODIFIED="1513218747386" TEXT="while-Schleife verwenden">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1513219035419" ID="ID_1033553745" MODIFIED="1513219047433" TEXT="pr&#xfc;fen: default constructible state core">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1513219271307" ID="ID_474013760" MODIFIED="1513284051101" TEXT="hier liegt der Hund begraben">
<linktarget COLOR="#179a76" DESTINATION="ID_474013760" ENDARROW="Default" ENDINCLINATION="513;33;" ID="Arrow_ID_1289625747" SOURCE="ID_1077327965" STARTARROW="None" STARTINCLINATION="426;-150;"/>
<icon BUILTIN="ksmiletris"/>
</node>
<node COLOR="#338800" CREATED="1513219330467" ID="ID_37372305" MODIFIED="1513284091448" TEXT="default-konstruierte RandomSeq mu&#xdf; leer sein!">
<font NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1513283787640" ID="ID_1300399860" MODIFIED="1513283802591" TEXT="Protokoll-pop funktioniert nicht">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1513283807613" ID="ID_711568006" MODIFIED="1513283821335" TEXT="ersch&#xf6;pfter Kind-Iter wird nicht wegger&#xe4;umt"/>
<node CREATED="1513283822323" ID="ID_1993626666" MODIFIED="1513283848220" TEXT="Folge: es wird auf dem letzten Element weitergez&#xe4;hlt"/>
<node CREATED="1513283849472" ID="ID_1522104923" MODIFIED="1513283980027" TEXT="Aber der Basis-Iter (Datenquelle) funktioniert korrekt">
<node CREATED="1513283998356" ID="ID_265634850" MODIFIED="1513284011958" TEXT="deshalb funktioniert der Basis-Algo halbwegs"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1513284012947" ID="ID_968932002" MODIFIED="1513284033823" TEXT="aber kein korrekte Backtracking">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1513284021720" ID="ID_591353215" MODIFIED="1513284032384" TEXT="und das Protokoll geht out-of sync">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node CREATED="1513283870965" ID="ID_372321627" MODIFIED="1513286350306" TEXT="Verdacht: wieder IterSrource schuld">
<icon BUILTIN="button_cancel"/>
<node CREATED="1513283882027" ID="ID_835741483" MODIFIED="1513283887198" TEXT="iterate hinter Ende"/>
<node CREATED="1513283888099" ID="ID_418628311" MODIFIED="1513283895629" TEXT="h&#xe4;tte den Pointer auf NULL setzen m&#xfc;ssen"/>
<node CREATED="1513286352195" ID="ID_613044101" MODIFIED="1513286362260" TEXT="nein, das ist es nicht">
<icon BUILTIN="stop-sign"/>
</node>
<node CREATED="1513286365209" ID="ID_1245783923" MODIFIED="1513286383453" TEXT="dataSrc poppt ja transparent...">
<icon BUILTIN="idea"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1513286396525" ID="ID_1013175212" MODIFIED="1513294184112" TEXT="Logisches Problem mit layered expand">
<arrowlink COLOR="#9c5265" DESTINATION="ID_263549307" ENDARROW="Default" ENDINCLINATION="189;145;" ID="Arrow_ID_1920033917" STARTARROW="None" STARTINCLINATION="1219;0;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1513286420386" ID="ID_32133695" MODIFIED="1513286442066" TEXT="oberer Layer bekommt Ende der Quell-Folge nicht mit"/>
<node CREATED="1513286442822" ID="ID_1310607126" MODIFIED="1513286465873" TEXT="...und macht daher endlos mit den Kindern weiter">
<icon BUILTIN="broken-line"/>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</node>