|
From: <mm...@us...> - 2012-11-29 12:01:38
|
Revision: 3297
http://dmcs.svn.sourceforge.net/dmcs/?rev=3297&view=rev
Author: mmsc
Date: 2012-11-29 12:01:26 +0000 (Thu, 29 Nov 2012)
Log Message:
-----------
Fix a bug regarding joining conflict models.
Modified Paths:
--------------
dmcs/branches/dmcs1.5/include/mcs/NewContext.h
dmcs/branches/dmcs1.5/src/mcs/NewContext.cpp
dmcs/branches/dmcs1.5/src/network/NewClient.cpp
dmcs/branches/dmcs1.5/src/new_dmcsc.cpp
Modified: dmcs/branches/dmcs1.5/include/mcs/NewContext.h
===================================================================
--- dmcs/branches/dmcs1.5/include/mcs/NewContext.h 2012-11-23 21:39:18 UTC (rev 3296)
+++ dmcs/branches/dmcs1.5/include/mcs/NewContext.h 2012-11-29 12:01:26 UTC (rev 3297)
@@ -79,7 +79,7 @@
EvaluatorPtr eval,
NewConcurrentMessageDispatcherPtr md);
- std::size_t
+ std::pair<std::size_t, std::size_t>
read_and_send(std::size_t parent_qid,
bool normal_solve,
EvaluatorPtr eval,
Modified: dmcs/branches/dmcs1.5/src/mcs/NewContext.cpp
===================================================================
--- dmcs/branches/dmcs1.5/src/mcs/NewContext.cpp 2012-11-23 21:39:18 UTC (rev 3296)
+++ dmcs/branches/dmcs1.5/src/mcs/NewContext.cpp 2012-11-29 12:01:26 UTC (rev 3297)
@@ -153,15 +153,25 @@
DBGLOG(DBG, "NewContext::read_and_send_k1_k2(): k1 = " << k1 << ", k2 = " << k2);
if (k1 == 0 && k2 == 0)
{
- std::size_t models_sent = read_and_send(parent_qid, normal_solve, eval, md);
+ std::pair<std::size_t, std::size_t> p = read_and_send(parent_qid, normal_solve, eval, md);
+ std::size_t models_sent = p.first;
+ std::size_t conflict_models = p.second;
}
else
{
- std::size_t models_sent = read_and_send(parent_qid, normal_solve, eval, md);
+ std::pair<std::size_t, std::size_t> p = read_and_send(parent_qid, normal_solve, eval, md);
+ std::size_t models_sent = p.first;
+ std::size_t conflict_models = p.second;
std::size_t models_counter = eval->getModelsCounter();
- DBGLOG(DBG, "NewContext::read_and_send_k1_k2(): models_counter = " << models_counter);
- DBGLOG(DBG, "NewContext::read_and_send_k1_k2(): models_sent = " << models_sent);
+ DBGLOG(DBG, "NewContext::read_and_send_k1_k2(): models_counter = " << models_counter);
+ DBGLOG(DBG, "NewContext::read_and_send_k1_k2(): conflict_models = " << conflict_models);
+ DBGLOG(DBG, "NewContext::read_and_send_k1_k2(): models_sent = " << models_sent);
+
+ assert (conflict_models <= models_counter);
+ models_counter -= conflict_models;
+
+ DBGLOG(DBG, "NewContext::read_and_send_k1_k2(): non-conflict models_counter = " << models_counter);
if (models_sent == 0)
// there was no model in the range [k1,k2]. models_counter are the number of models before k1.
@@ -191,13 +201,15 @@
// Read from EVAL_OUT_MQ[index] until getting (heads, NULL).
// Return the number of models received.
// Note that this function doesn't care about (k1, k2). The Evaluator and the outter loop take care of this issue.
-std::size_t
+std::pair<std::size_t, std::size_t>
NewContext::read_and_send(std::size_t parent_qid,
bool normal_solve,
EvaluatorPtr eval,
NewConcurrentMessageDispatcherPtr md)
{
- std::size_t models_counter = 0;
+ std::size_t models_sent = 0;
+ std::size_t conflict_models = 0;
+
int timeout = 0;
while (1)
{
@@ -220,17 +232,18 @@
DBGLOG(DBG, "NewContext[" << ctx_id << "]::read_and_send(). Got res = " << *belief_state);
if (send_out_result(parent_qid, normal_solve, heads, belief_state, md))
{
- ++models_counter;
+ ++models_sent;
DBGLOG(DBG, "NewContext[" << ctx_id << "]::read_and_send(). successfully sent.");
}
else
{
+ ++conflict_models;
DBGLOG(DBG, "NewContext[" << ctx_id << "]::read_and_send().NOT sent due to wrong guess.");
}
}
}
- return models_counter;
+ return std::make_pair<std::size_t, std::size_t>(models_sent, conflict_models);
}
Modified: dmcs/branches/dmcs1.5/src/network/NewClient.cpp
===================================================================
--- dmcs/branches/dmcs1.5/src/network/NewClient.cpp 2012-11-23 21:39:18 UTC (rev 3296)
+++ dmcs/branches/dmcs1.5/src/network/NewClient.cpp 2012-11-29 12:01:26 UTC (rev 3297)
@@ -215,8 +215,8 @@
std::size_t pack_size = mess->getPackSize();
std::size_t next_k = 0;
- DBGLOG(DBG, "result_list.size() = " << result_list->size());
- DBGLOG(DBG, "pack_size = " << pack_size);
+ DBGLOG(DBG, "NewClient::handle_read_answer: result_list.size() = " << result_list->size());
+ DBGLOG(DBG, "NewClient::handle_read_answer: pack_size = " << pack_size);
if (pack_size > 0)
{
Modified: dmcs/branches/dmcs1.5/src/new_dmcsc.cpp
===================================================================
--- dmcs/branches/dmcs1.5/src/new_dmcsc.cpp 2012-11-23 21:39:18 UTC (rev 3296)
+++ dmcs/branches/dmcs1.5/src/new_dmcsc.cpp 2012-11-29 12:01:26 UTC (rev 3297)
@@ -304,7 +304,7 @@
while (keep_running)
{
- DBGLOG(DBG, "Entering round " << next_count);
+ DBGLOG(DBG, "new_dmcsc: Entering round " << next_count);
io_service->run();
last_model_count = model_count;
@@ -313,6 +313,13 @@
diff_count = final_result.size() - diff_count;
next_count++;
+ /*if (!unique)
+ {
+ DBGLOG(DBG, "new_dmcsc: Do not need unique answers. Going to terminate the client after 1st round.");
+ client.terminate(end_message);
+ break;
+ }*/
+
if (last_round)
{
keep_running = false;
@@ -326,6 +333,7 @@
std::size_t left_to_request = pack_size - final_result.size();
k1 = k2 + 1;
k2 = k1 + left_to_request;
+ DBGLOG(DBG, "new_dmcsc: Going to ask for next. k1 = " << k1 << ", k2 = " << k2);
request.setPackRequest(k1, k2);
client.next(request);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|