Skip to content

Commit 44b759d

Browse files
feat(Object Neihbor): find neighbor with Rtree
1 parent 5737b57 commit 44b759d

8 files changed

Lines changed: 28 additions & 35 deletions

File tree

include/geode/stochastic/sampling/mcmc/metropolis_hasting_sampler.hpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -266,10 +266,12 @@ namespace geode
266266
"[MH] Change proposal has no new_object" );
267267
OPENGEODE_ASSERT( proposal.old_object_id.has_value(),
268268
"[MH] Change proposal has no index" );
269-
const auto delta_log_energy = energy_.delta_log_energy_change(
270-
state, proposal.old_object_id.value(),
269+
geode::ObjectRef< Type > new_object{
271270
proposal.new_object.value().first,
272-
proposal.new_object.value().second );
271+
proposal.new_object.value().second
272+
};
273+
const auto delta_log_energy = energy_.delta_log_energy_change(
274+
state, proposal.old_object_id.value(), new_object );
273275
// should we test that objects are in the same group?
274276
// should be ensured by the dynamic
275277
return accept_or_reject( proposal, state, engine, delta_log_energy,

include/geode/stochastic/sampling/mcmc/models/components/energy_term.hpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,13 +127,12 @@ namespace geode
127127
virtual double delta_log_add( const ObjectSet< Type >& state,
128128
const ObjectRef< Type >& new_object ) const = 0;
129129

130-
virtual double delta_log_remove(
131-
const ObjectSet< Type >& state, ObjectId object_id ) const = 0;
130+
virtual double delta_log_remove( const ObjectSet< Type >& state,
131+
const ObjectId& object_id ) const = 0;
132132

133133
virtual double delta_log_change( const ObjectSet< Type >& state,
134-
ObjectId old_object_id,
135-
const Type& new_object,
136-
const uuid& new_object_subset_id ) const = 0;
134+
const ObjectId& old_object_id,
135+
const ObjectRef< Type >& new_object ) const = 0;
137136

138137
virtual double statistic( const ObjectSet< Type >& state ) const = 0;
139138

include/geode/stochastic/sampling/mcmc/models/components/intensity_term.hpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ namespace geode
6161
}
6262

6363
double delta_log_remove( const ObjectSet< Type >& /*state*/,
64-
ObjectId object_id ) const override
64+
const ObjectId& object_id ) const override
6565
{
6666
if( !this->is_targeted_subset( object_id.subset ) )
6767
{
@@ -71,9 +71,8 @@ namespace geode
7171
}
7272

7373
double delta_log_change( const ObjectSet< Type >& /*state*/,
74-
ObjectId /*old_object_id*/,
75-
const Type& /*new_object*/,
76-
const uuid& /*new_object_subset_id*/ ) const override
74+
const ObjectId& /*old_object_id*/,
75+
const ObjectRef< Type >& /*new_object*/ ) const override
7776
{
7877
return 0.0;
7978
}

include/geode/stochastic/sampling/mcmc/models/components/pairwise_term.hpp

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,8 @@ namespace geode
7979
return this->contribution( delta );
8080
}
8181

82-
double delta_log_remove(
83-
const ObjectSet< Type >& state, ObjectId object_id ) const override
82+
double delta_log_remove( const ObjectSet< Type >& state,
83+
const ObjectId& object_id ) const override
8484
{
8585
if( !this->is_targeted_subset( object_id.subset ) )
8686
{
@@ -102,12 +102,11 @@ namespace geode
102102
}
103103

104104
double delta_log_change( const ObjectSet< Type >& state,
105-
ObjectId old_object_id,
106-
const Type& new_object,
107-
const uuid& new_object_subset_id ) const override
105+
const ObjectId& old_object_id,
106+
const ObjectRef< Type >& new_object ) const override
108107
{
109108
if( !this->is_targeted_subset( old_object_id.subset )
110-
|| !this->is_targeted_subset( new_object_subset_id ) )
109+
|| !this->is_targeted_subset( new_object.subset ) )
111110
{
112111
return 0.0;
113112
}
@@ -128,9 +127,8 @@ namespace geode
128127
}
129128

130129
// Add new object's interactions
131-
ObjectRef< Type > object_to_add{ new_object, new_object_subset_id };
132-
const auto new_neighbors = state.neighbors(
133-
new_object, interaction_->neighborhood_searching_distance() );
130+
const auto new_neighbors = state.neighbors( new_object.object,
131+
interaction_->neighborhood_searching_distance() );
134132
for( auto neigh_id : new_neighbors )
135133
{
136134
if( old_object_id == neigh_id )
@@ -139,7 +137,7 @@ namespace geode
139137
}
140138
ObjectRef< Type > neigh_object{ state.get_object( neigh_id ),
141139
neigh_id.subset };
142-
delta += interaction_->evaluate( object_to_add, neigh_object );
140+
delta += interaction_->evaluate( new_object, neigh_object );
143141
}
144142

145143
return this->contribution( delta );

include/geode/stochastic/sampling/mcmc/models/gibbs_energy.hpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,15 +104,14 @@ namespace geode
104104

105105
double delta_log_energy_change( const ObjectSet< Type >& state,
106106
ObjectId old_object_id,
107-
const Type& new_object,
108-
const uuid& new_object_subset_id ) const
107+
const ObjectRef< Type >& new_object ) const
109108
{
110109
double log_energy{ 0.0 };
111110
for( const auto& [id, term] : energy_terms_ )
112111
{
113112
geode_unused( id );
114-
log_energy += term->delta_log_change(
115-
state, old_object_id, new_object, new_object_subset_id );
113+
log_energy +=
114+
term->delta_log_change( state, old_object_id, new_object );
116115
}
117116
return log_energy;
118117
}

tests/stochastic/sampling/mcmc/models/components/test-intensity-term.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,7 @@ void test_normal_positive_intensity( double lambda,
6262

6363
OPENGEODE_EXCEPTION( delta_remove == neg_log_lambda * -1.,
6464
"[test intensity]- delta_log_remove wrong value." );
65-
66-
double delta_change =
67-
term.delta_log_change( pattern, obj_id, p3, subset_id );
65+
double delta_change = term.delta_log_change( pattern, obj_id, p_ref );
6866
OPENGEODE_EXCEPTION(
6967
delta_change == 0., "[test intensity]- delta_log_change wrong value." );
7068
}
@@ -91,9 +89,7 @@ void test_normal_zero_intensity( double lambda,
9189
double delta_remove = term.delta_log_remove( pattern, obj_id );
9290
OPENGEODE_EXCEPTION( delta_remove == 0.,
9391
"[test zero intensity]- delta_log_remove wrong value." );
94-
95-
double delta_change =
96-
term.delta_log_change( pattern, obj_id, p3, subset_id );
92+
double delta_change = term.delta_log_change( pattern, obj_id, p_ref );
9793
OPENGEODE_EXCEPTION( delta_change == 0.,
9894
"[test zero intensity]- delta_log_change wrong value." );
9995
}

tests/stochastic/sampling/mcmc/models/components/test-pairwise-term.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ void test_normal_positive_pairwise( double gamma,
7474
OPENGEODE_EXCEPTION( delta_remove == neg_log_gamma * -1.,
7575
"[test pairwise] - delta_log_remove wrong value." );
7676

77-
auto delta_change = term.delta_log_change( pattern, obj_id, p3, subset_id );
77+
auto delta_change = term.delta_log_change( pattern, obj_id, p_ref );
7878
// Replacing p1 with p3 changes interactions: p3 interacts with p2 → 1 pair
7979
// Old p1 interacted with p2 → 1 pair → no net change
8080
OPENGEODE_EXCEPTION(
@@ -106,7 +106,7 @@ void test_zero_pairwise( double gamma,
106106
OPENGEODE_EXCEPTION( delta_remove == 0.,
107107
"[test zero pairwise] - delta_log_remove wrong value." );
108108

109-
auto delta_change = term.delta_log_change( pattern, obj_id, p3, subset_id );
109+
auto delta_change = term.delta_log_change( pattern, obj_id, p_ref );
110110
OPENGEODE_EXCEPTION( delta_change == 0.,
111111
"[test zero pairwise] - delta_log_change wrong value." );
112112
}

tests/stochastic/sampling/mcmc/models/test-gibbs-energy.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ void test_gibbs_energy( const geode::uuid& subset_id )
9090

9191
// Change point test
9292
double delta_change =
93-
gibbs_energy.delta_log_energy_change( pattern, obj_id, p3, subset_id );
93+
gibbs_energy.delta_log_energy_change( pattern, obj_id, p_ref );
9494
OPENGEODE_EXCEPTION( std::isfinite( delta_change ),
9595
"[test gibbs] Delta change should be finite." );
9696

0 commit comments

Comments
 (0)