Made svm_struct_controller_node support network_address objects.

This commit is contained in:
Davis King 2013-01-26 17:25:12 -05:00
parent cbc469bf42
commit 4f411d5a44
3 changed files with 42 additions and 23 deletions

View File

@ -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(make_pair(ip,port));
nodes.push_back(addr);
}
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<std::pair<std::string,unsigned short> >& nodes_,
const std::vector<network_address>& 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<std::pair<std::string,unsigned short> > nodes;
std::vector<network_address> nodes;
double eps;
mutable bool verbose;
double C;
@ -622,7 +629,7 @@ namespace dlib
long num_dims;
};
std::vector<std::pair<std::string,unsigned short> > nodes;
std::vector<network_address> nodes;
double eps;
mutable bool verbose;
double C;

View File

@ -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<double> 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 (

View File

@ -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);