diff --git a/dlib/svm/structural_svm_distributed.h b/dlib/svm/structural_svm_distributed.h index 5a5906386..e4bb7fcee 100644 --- a/dlib/svm/structural_svm_distributed.h +++ b/dlib/svm/structural_svm_distributed.h @@ -365,29 +365,36 @@ namespace dlib } void add_processing_node ( - const std::string& ip, - unsigned short port + const network_address& addr ) { // make sure requires clause is not broken - DLIB_ASSERT(is_ip_address(ip) && port != 0, + DLIB_ASSERT(addr.port != 0, "\t void structural_svm_problem::add_processing_node()" << "\n\t Invalid inputs were given to this function" - << "\n\t ip: " << ip - << "\n\t port: " << port + << "\n\t addr.host_address: " << addr.host_address + << "\n\t addr.port: " << addr.port << "\n\t this: " << this ); - // check if this pair is already registered + // check if this address is already registered for (unsigned long i = 0; i < nodes.size(); ++i) { - if (nodes[i] == make_pair(ip,port)) + if (nodes[i] == addr) { return; } } + + nodes.push_back(addr); + } - nodes.push_back(make_pair(ip,port)); + void add_processing_node ( + const std::string& ip_or_hostname, + unsigned short port + ) + { + add_processing_node(network_address(ip_or_hostname,port)); } unsigned long get_num_processing_nodes ( @@ -439,7 +446,7 @@ namespace dlib typedef matrix_type_ matrix_type; problem_type ( - const std::vector >& nodes_, + const std::vector& nodes_, double eps_, bool verbose_, double C_ @@ -465,7 +472,7 @@ namespace dlib bridges.resize(nodes.size()); for (unsigned long i = 0; i< bridges.size(); ++i) { - bridges[i].reset(new bridge(connect_to_ip_and_port(nodes[i].first,nodes[i].second), + bridges[i].reset(new bridge(connect_to(nodes[i]), receive(in), transmit(*out_pipes[i]))); } @@ -605,7 +612,7 @@ namespace dlib risk = total_loss + dot(subgradient,w); } - std::vector > nodes; + std::vector nodes; double eps; mutable bool verbose; double C; @@ -622,7 +629,7 @@ namespace dlib long num_dims; }; - std::vector > nodes; + std::vector nodes; double eps; mutable bool verbose; double C; diff --git a/dlib/svm/structural_svm_distributed_abstract.h b/dlib/svm/structural_svm_distributed_abstract.h index 120d76c03..6b35c5ba9 100644 --- a/dlib/svm/structural_svm_distributed_abstract.h +++ b/dlib/svm/structural_svm_distributed_abstract.h @@ -88,9 +88,9 @@ namespace dlib svm_struct_controller_node cont; cont.set_c(100); // Tell cont where the processing nodes are on your network. - cont.add_processing_node("192.168.1.10", 12345); - cont.add_processing_node("192.168.1.11", 12345); - cont.add_processing_node("192.168.1.12", 12345); + cont.add_processing_node("192.168.1.10:12345"); + cont.add_processing_node("192.168.1.11:12345"); + cont.add_processing_node("192.168.1.12:12345"); matrix w; oca solver; cont(solver, w); // Run the optimization. @@ -183,17 +183,29 @@ namespace dlib !*/ void add_processing_node ( - const std::string& ip, + const network_address& addr + ); + /*! + requires + - addr.port != 0 + ensures + - if (this address hasn't already been added) then + - #get_num_processing_nodes() == get_num_processing_nodes() + 1 + - When operator() is invoked to solve the structural svm problem this + object will connect to the svm_struct_processing_node located at the + given network address and will include it in the distributed + optimization. + !*/ + + void add_processing_node ( + const std::string& ip_or_hostname, unsigned short port ); /*! + requires + - port != 0 ensures - - if (this port and ip haven't already been added) then - - #get_num_processing_nodes() == get_num_processing_nodes() + 1 - - When operator() is invoked to solve the structural svm problem - this object will connect to the svm_struct_processing_node located - at the given IP address and port number and will include it in the - distributed optimization. + - invokes: add_processing_node(network_address(ip_or_hostname, port)) !*/ unsigned long get_num_processing_nodes ( diff --git a/dlib/test/svm_struct.cpp b/dlib/test/svm_struct.cpp index af54c8aa1..835848448 100644 --- a/dlib/test/svm_struct.cpp +++ b/dlib/test/svm_struct.cpp @@ -212,7 +212,7 @@ namespace if (verbose) controller.be_verbose(); controller.add_processing_node("127.0.0.1", 12345); - controller.add_processing_node("127.0.0.1", 12346); + controller.add_processing_node("localhost:12346"); svm_objective = controller(solver, weights);