Skip to content

Commit

Permalink
Made svm_struct_controller_node support network_address objects.
Browse files Browse the repository at this point in the history
  • Loading branch information
davisking committed Jan 26, 2013
1 parent cbc469b commit 4f411d5
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 23 deletions.
31 changes: 19 additions & 12 deletions dlib/svm/structural_svm_distributed.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
Expand Down Expand Up @@ -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_
Expand All @@ -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])));
}

Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand Down
32 changes: 22 additions & 10 deletions dlib/svm/structural_svm_distributed_abstract.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -183,17 +183,29 @@ namespace dlib
!*/

void add_processing_node (
const std::string& ip,
unsigned short port
const network_address& addr
);
/*!
requires
- addr.port != 0
ensures
- if (this port and ip haven't already been added) then
- 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 IP address and port number and will include it in the
distributed optimization.
- 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
- invokes: add_processing_node(network_address(ip_or_hostname, port))
!*/

unsigned long get_num_processing_nodes (
Expand Down
2 changes: 1 addition & 1 deletion dlib/test/svm_struct.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);


Expand Down

0 comments on commit 4f411d5

Please sign in to comment.