Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Simonstrator
PeerfactSim.KOM
Commits
8cc66195
Commit
8cc66195
authored
Jul 27, 2020
by
Julian Zobel
Browse files
Merge remote-tracking branch 'origin/jz/dev-monitor' into jz/master
parents
d8bfa8aa
bab9cc2c
Changes
39
Hide whitespace changes
Inline
Side-by-side
src/de/tud/kom/p2psim/impl/topology/movement/modularosm/attraction/RandomAttractionGenerator.java
View file @
8cc66195
...
...
@@ -24,9 +24,7 @@ import java.util.LinkedList;
import
java.util.List
;
import
java.util.Random
;
import
de.tud.kom.p2psim.api.scenario.ConfigurationException
;
import
de.tud.kom.p2psim.api.topology.Topology
;
import
de.tud.kom.p2psim.impl.topology.util.PositionVector
;
import
de.tudarmstadt.maki.simonstrator.api.Binder
;
import
de.tudarmstadt.maki.simonstrator.api.Randoms
;
import
de.tudarmstadt.maki.simonstrator.api.component.sensor.location.IAttractionPoint
;
import
de.tudarmstadt.maki.simonstrator.api.util.XMLConfigurableConstructor
;
...
...
@@ -44,12 +42,10 @@ import de.tudarmstadt.maki.simonstrator.api.util.XMLConfigurableConstructor;
* @author Christoph Muenker, Julian Zobel
* @version 1.21, 12 2018
*/
public
class
RandomAttractionGenerator
implem
en
t
s
I
Attraction
Generato
r
{
public
class
RandomAttractionGenerator
ext
en
d
s
Abstract
Attraction
Provide
r
{
private
Random
rand
;
private
PositionVector
worldDimension
;
private
int
numberOfAttractionPoints
;
private
boolean
numberOfAPsSet
=
false
;
...
...
@@ -62,9 +58,9 @@ public class RandomAttractionGenerator implements IAttractionGenerator {
@XMLConfigurableConstructor
({
"numberOfAttractionPoints"
,
"maximumRadius"
,
"minimumRadius"
,
"minimumDistance"
})
public
RandomAttractionGenerator
(
int
numberOfAttractionPoints
,
double
maximumRadius
,
double
minimumRadius
,
double
minimumDistance
)
{
this
.
rand
=
Randoms
.
getRandom
(
RandomAttractionGenerator
.
class
);
this
.
worldDimension
=
Binder
.
getComponentOrNull
(
Topology
.
class
)
.
getWorldDimensions
();
super
(
);
this
.
rand
=
Randoms
.
getRandom
(
RandomAttractionGenerator
.
class
);
if
(
numberOfAttractionPoints
<=
0
)
{
throw
new
ConfigurationException
(
"NumberOfAttractionPoints should be at least 1!"
);
...
...
@@ -74,25 +70,25 @@ public class RandomAttractionGenerator implements IAttractionGenerator {
this
.
maximumRadius
=
maximumRadius
;
this
.
minimumRadius
=
minimumRadius
;
this
.
minimumDistance
=
minimumDistance
;
attractionPoints
.
clear
();
createAttractionPoints
();
}
@Override
public
List
<
I
AttractionPoint
>
getAttractionPoints
()
{
public
Linked
List
<
AttractionPoint
>
getAttractionPoints
()
{
if
(!
numberOfAPsSet
)
{
throw
new
ConfigurationException
(
"Number of Attraction Points is not set in RandomAttractionGenerator!"
);
}
if
(
a
ttractionPoints
.
isEmpty
())
if
(
super
.
getA
ttractionPoints
()
.
isEmpty
())
createAttractionPoints
();
return
a
ttractionPoints
;
return
super
.
getA
ttractionPoints
()
;
}
private
void
createAttractionPoints
()
{
List
<
I
AttractionPoint
>
result
=
new
LinkedList
<
I
AttractionPoint
>();
Linked
List
<
AttractionPoint
>
result
=
new
LinkedList
<
AttractionPoint
>();
// make a break counter to prevent more than 10 iterations and an infinity loop in general.
int
c
=
0
;
...
...
@@ -130,15 +126,13 @@ public class RandomAttractionGenerator implements IAttractionGenerator {
radius
=
minimumRadius
;
}
I
AttractionPoint
aPoint
=
new
AttractionPoint
Impl
(
"AP-"
+
i
,
posVec
);
AttractionPoint
aPoint
=
new
AttractionPoint
(
"AP-"
+
i
,
posVec
);
aPoint
.
setRadius
(
radius
);
c
=
0
;
result
.
add
(
aPoint
);
}
attractionPoints
.
clear
();
for
(
IAttractionPoint
ap
:
result
)
{
for
(
AttractionPoint
ap
:
result
)
{
addAttractionPoint
(
ap
);
}
}
...
...
src/de/tud/kom/p2psim/impl/topology/movement/modularosm/attraction/RandomDynamicAttractionGenerator.java
View file @
8cc66195
...
...
@@ -20,18 +20,15 @@
package
de.tud.kom.p2psim.impl.topology.movement.modularosm.attraction
;
import
java.util.List
;
import
java.util.Random
;
import
de.tud.kom.p2psim.api.scenario.ConfigurationException
;
import
de.tud.kom.p2psim.api.topology.Topology
;
import
de.tud.kom.p2psim.impl.topology.util.PositionVector
;
import
de.tudarmstadt.maki.simonstrator.api.Binder
;
import
de.tudarmstadt.maki.simonstrator.api.Event
;
import
de.tudarmstadt.maki.simonstrator.api.EventHandler
;
import
de.tudarmstadt.maki.simonstrator.api.Monitor
;
import
de.tudarmstadt.maki.simonstrator.api.Monitor.Level
;
import
de.tudarmstadt.maki.simonstrator.api.Randoms
;
import
de.tudarmstadt.maki.simonstrator.api.component.sensor.location.IAttractionPoint
;
import
de.tudarmstadt.maki.simonstrator.api.util.XMLConfigurableConstructor
;
/**
...
...
@@ -46,12 +43,10 @@ import de.tudarmstadt.maki.simonstrator.api.util.XMLConfigurableConstructor;
* @author Julian Zobel
* @version 1.0, March 2019
*/
public
class
RandomDynamicAttractionGenerator
implem
en
t
s
I
Attraction
Generato
r
{
public
class
RandomDynamicAttractionGenerator
ext
en
d
s
Abstract
Attraction
Provide
r
{
private
Random
rand
;
private
PositionVector
worldDimension
;
private
int
minNumberOfAttractionPoints
;
private
int
maxNumberOfAttractionPoints
;
...
...
@@ -70,9 +65,7 @@ public class RandomDynamicAttractionGenerator implements IAttractionGenerator {
double
minimumDistance
)
{
this
.
rand
=
Randoms
.
getRandom
(
RandomDynamicAttractionGenerator
.
class
);
this
.
worldDimension
=
Binder
.
getComponentOrNull
(
Topology
.
class
)
.
getWorldDimensions
();
if
(
minNumberOfAttractionPoints
<=
0
)
{
throw
new
ConfigurationException
(
"NumberOfAttractionPoints should be at least 1!"
);
...
...
@@ -91,26 +84,15 @@ public class RandomDynamicAttractionGenerator implements IAttractionGenerator {
this
.
minDynamicIntervall
=
minDynamicIntervall
;
this
.
maxDynamicIntervall
=
maxDynamicIntervall
;
attractionPoints
.
clear
();
updateAttractionPoints
();
}
@Override
public
List
<
IAttractionPoint
>
getAttractionPoints
()
{
return
attractionPoints
;
}
/**
*
* @return an integer representing a randomly chosen number of attraction points within the allowed range of numbers
*/
private
int
randomNumberOfAttractionPoints
()
{
return
minNumberOfAttractionPoints
+
rand
.
nextInt
((
maxNumberOfAttractionPoints
-
minNumberOfAttractionPoints
)
+
1
);
}
private
void
scheduleDynamicEvent
(
IAttractionPoint
attractionPoint
)
{
private
void
scheduleDynamicEvent
(
AttractionPoint
attractionPoint
)
{
long
r
=
(
long
)
(
rand
.
nextDouble
()
*
(
maxDynamicIntervall
-
minDynamicIntervall
))
+
minDynamicIntervall
;
...
...
@@ -118,7 +100,7 @@ public class RandomDynamicAttractionGenerator implements IAttractionGenerator {
@Override
public
void
eventOccurred
(
Object
content
,
int
type
)
{
// maybe was already removed...
if
(
a
ttractionPoint
s
.
contains
(
attractionPoint
))
{
if
(
hasA
ttractionPoint
(
attractionPoint
))
{
removeAttractionPoint
(
attractionPoint
);
updateAttractionPoints
();
}
...
...
@@ -128,29 +110,30 @@ public class RandomDynamicAttractionGenerator implements IAttractionGenerator {
protected
void
updateAttractionPoints
()
{
int
numberOfAttractionPoints
=
randomNumberOfAttractionPoints
();
int
currentSize
=
getAttractionPoints
().
size
();
// do nothing if this is the required amount of attraction points
if
(
numberOfAttractionPoints
==
attractionPoints
.
s
ize
()
)
{
if
(
numberOfAttractionPoints
==
currentS
ize
)
{
return
;
}
// remove until this number fits
else
if
(
numberOfAttractionPoints
<
attractionPoints
.
s
ize
()
)
{
int
deltaAP
=
attractionPoints
.
s
ize
()
-
numberOfAttractionPoints
;
else
if
(
numberOfAttractionPoints
<
currentS
ize
)
{
int
deltaAP
=
currentS
ize
-
numberOfAttractionPoints
;
for
(
int
i
=
0
;
i
<
deltaAP
;
i
++)
{
int
random
=
rand
.
nextInt
(
attractionPoints
.
s
ize
()
);
removeAttractionPoint
(
a
ttractionPoints
.
get
(
random
));
int
random
=
rand
.
nextInt
(
currentS
ize
);
removeAttractionPoint
(
getA
ttractionPoints
()
.
get
(
random
));
}
return
;
}
// add more attraction points until it fits
else
{
int
deltaAP
=
numberOfAttractionPoints
-
attractionPoints
.
s
ize
()
;
int
deltaAP
=
numberOfAttractionPoints
-
currentS
ize
;
for
(
int
i
=
0
;
i
<
deltaAP
;
i
++)
{
I
AttractionPoint
newAP
=
createAttractionPoint
();
AttractionPoint
newAP
=
createAttractionPoint
();
scheduleDynamicEvent
(
newAP
);
addAttractionPoint
(
newAP
);
}
...
...
@@ -162,7 +145,7 @@ public class RandomDynamicAttractionGenerator implements IAttractionGenerator {
*
* @return
*/
private
I
AttractionPoint
createAttractionPoint
()
{
private
AttractionPoint
createAttractionPoint
()
{
// make a break counter to prevent more than 100 iterations and an infinity loop in general.
int
c
=
100
;
...
...
@@ -181,7 +164,7 @@ public class RandomDynamicAttractionGenerator implements IAttractionGenerator {
}
// if within world dimensions, continue checking against other attraction points
for
(
I
AttractionPoint
ap
:
a
ttractionPoints
)
{
for
(
AttractionPoint
ap
:
getA
ttractionPoints
()
)
{
// if this point is closer than the given minimum distance to another point, or the radii of the points would overlap,
// or if the radius would exceed the simulation area
// then discard this attraction point and create a new one
...
...
@@ -195,12 +178,12 @@ public class RandomDynamicAttractionGenerator implements IAttractionGenerator {
radius
=
0
;
}
I
AttractionPoint
aPoint
=
new
AttractionPoint
Impl
(
"AP-"
+
rand
.
nextInt
(),
posVec
);
AttractionPoint
aPoint
=
new
AttractionPoint
(
"AP-"
+
rand
.
nextInt
(),
posVec
);
aPoint
.
setRadius
(
radius
);
return
aPoint
;
}
I
AttractionPoint
ap
=
new
AttractionPoint
Impl
(
"AP-ERROR"
,
new
PositionVector
(
worldDimension
.
getX
()
/
2
,
worldDimension
.
getY
()
/
2
));
AttractionPoint
ap
=
new
AttractionPoint
(
"AP-ERROR"
,
new
PositionVector
(
worldDimension
.
getX
()
/
2
,
worldDimension
.
getY
()
/
2
));
ap
.
setRadius
(
0
);
ap
.
setWeight
(
0
);
...
...
@@ -208,13 +191,10 @@ public class RandomDynamicAttractionGenerator implements IAttractionGenerator {
return
ap
;
}
private
PositionVector
createPosVec
()
{
double
x
=
rand
.
nextDouble
()
*
worldDimension
.
getX
();
double
y
=
rand
.
nextDouble
()
*
worldDimension
.
getY
();
return
new
PositionVector
(
x
,
y
);
}
}
}
src/de/tud/kom/p2psim/impl/topology/movement/modularosm/attraction/TemporalAttractionPoint.java
View file @
8cc66195
...
...
@@ -23,7 +23,7 @@ package de.tud.kom.p2psim.impl.topology.movement.modularosm.attraction;
import
de.tud.kom.p2psim.impl.topology.util.PositionVector
;
import
de.tudarmstadt.maki.simonstrator.api.util.XMLConfigurableConstructor
;
public
class
TemporalAttractionPoint
extends
Basic
AttractionPoint
{
public
class
TemporalAttractionPoint
extends
AttractionPoint
{
private
long
placementTime
;
private
long
removalTime
;
...
...
src/de/tud/kom/p2psim/impl/topology/movement/modularosm/attraction/TwoPointFixedAttractionGenerator.java
View file @
8cc66195
...
...
@@ -20,33 +20,21 @@
package
de.tud.kom.p2psim.impl.topology.movement.modularosm.attraction
;
import
java.util.List
;
import
de.tud.kom.p2psim.api.topology.Topology
;
import
de.tud.kom.p2psim.impl.topology.util.PositionVector
;
import
de.tudarmstadt.maki.simonstrator.api.Binder
;
import
de.tudarmstadt.maki.simonstrator.api.component.sensor.location.IAttractionPoint
;
import
de.tudarmstadt.maki.simonstrator.api.util.XMLConfigurableConstructor
;
/**
* Implementation of the interface {@link AttractionGenerator}.
*
* Generates the given number of {@link IAttractionPoint}s and sets the
* position randomly within the world dimensions.
*
* @author Julian Zobel
* @version 1.0, Nov 2018
*/
public
class
TwoPointFixedAttractionGenerator
implements
IAttractionGenerator
{
private
PositionVector
worldDimension
;
public
class
TwoPointFixedAttractionGenerator
extends
AbstractAttractionProvider
{
private
double
x1
,
x2
,
y1
,
y2
;
@XMLConfigurableConstructor
({
"x1"
,
"y1"
,
"x2"
,
"y2"
})
public
TwoPointFixedAttractionGenerator
(
double
x1
,
double
y1
,
double
x2
,
double
y2
)
{
this
.
worldDimension
=
Binder
.
getComponentOrNull
(
Topology
.
class
)
.
getWorldDimensions
();
super
();
this
.
x1
=
x1
;
this
.
y1
=
y1
;
...
...
@@ -55,27 +43,19 @@ public class TwoPointFixedAttractionGenerator implements IAttractionGenerator {
createAttractionPoints
();
}
@Override
public
List
<
IAttractionPoint
>
getAttractionPoints
()
{
if
(
attractionPoints
.
isEmpty
())
createAttractionPoints
();
return
attractionPoints
;
}
private
void
createAttractionPoints
()
{
PositionVector
p1
=
new
PositionVector
(
x1
,
y1
);
I
AttractionPoint
ap1
=
new
AttractionPoint
Impl
(
"AP1"
,
p1
);
AttractionPoint
ap1
=
new
AttractionPoint
(
"AP1"
,
p1
);
ap1
.
setRadius
(
100
);
attractionPoint
s
.
add
(
ap1
);
a
ddA
ttractionPoint
(
ap1
);
PositionVector
p2
=
new
PositionVector
(
x2
,
y2
);
I
AttractionPoint
ap2
=
new
AttractionPoint
Impl
(
"AP2"
,
p2
);
AttractionPoint
ap2
=
new
AttractionPoint
(
"AP2"
,
p2
);
ap2
.
setRadius
(
100
);
attractionPoint
s
.
add
(
ap2
);
a
ddA
ttractionPoint
(
ap2
);
}
...
...
src/de/tud/kom/p2psim/impl/topology/movement/modularosm/attraction/hostcount/HostAtAttractionPointCounter.java
View file @
8cc66195
...
...
@@ -65,7 +65,7 @@ public class HostAtAttractionPointCounter {
* @param IAttractionPoint The {@link IAttractionPoint} to be checked.
* @return Integer
*/
public
static
int
getHostCountOfAttractionPoint
(
IAttractionPoint
attractionPoint
,
Set
<
SimLocationActuator
>
hostsToConsider
)
{
public
static
int
getHostCountOfAttractionPoint
(
IAttractionPoint
attractionPoint
,
LinkedHash
Set
<
SimLocationActuator
>
hostsToConsider
)
{
return
getHostsOfAttractionPoint
(
attractionPoint
,
hostsToConsider
).
size
();
}
...
...
@@ -75,9 +75,9 @@ public class HostAtAttractionPointCounter {
* @param IAttractionPoint The {@link IAttractionPoint} to be checked.
* @return Set<SimLocationActuator>
*/
public
static
Set
<
SimLocationActuator
>
getHostsOfAttractionPoint
(
IAttractionPoint
attractionPoint
,
Set
<
SimLocationActuator
>
hostsToConsider
)
{
public
static
LinkedHash
Set
<
SimLocationActuator
>
getHostsOfAttractionPoint
(
IAttractionPoint
attractionPoint
,
Set
<
SimLocationActuator
>
hostsToConsider
)
{
Set
<
SimLocationActuator
>
hosts
=
new
LinkedHashSet
<
SimLocationActuator
>();
LinkedHash
Set
<
SimLocationActuator
>
hosts
=
new
LinkedHashSet
<
SimLocationActuator
>();
for
(
SimLocationActuator
h
:
hostsToConsider
)
{
if
(
isHostInAttractionPointArea
(
h
,
attractionPoint
))
{
...
...
src/de/tud/kom/p2psim/impl/topology/movement/modularosm/groups/MovementGroupContainer.java
View file @
8cc66195
...
...
@@ -22,13 +22,8 @@ package de.tud.kom.p2psim.impl.topology.movement.modularosm.groups;
import
java.util.LinkedHashMap
;
import
java.util.LinkedHashSet
;
import
java.util.Map
;
import
java.util.Set
;
import
de.tud.kom.p2psim.api.topology.movement.SimLocationActuator
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.ISocialGroupMovementAnalyzer
;
import
de.tud.kom.p2psim.impl.util.Tuple
;
import
de.tudarmstadt.maki.simonstrator.api.Monitor
;
import
de.tudarmstadt.maki.simonstrator.api.Time
;
/**
...
...
@@ -40,15 +35,15 @@ import de.tudarmstadt.maki.simonstrator.api.Time;
public
class
MovementGroupContainer
{
private
static
MovementGroupContainer
instance
;
private
Set
<
SocialMovementGroup
>
groups
;
private
LinkedHash
Set
<
SocialMovementGroup
>
groups
;
// Mappings
private
Map
<
SimLocationActuator
,
Long
>
leftGroupAtTime
;
private
Map
<
SimLocationActuator
,
Boolean
>
hasMerged
;
private
Map
<
SimLocationActuator
,
Long
>
mergedAtTime
;
private
LinkedHash
Map
<
SimLocationActuator
,
Long
>
leftGroupAtTime
;
private
LinkedHash
Map
<
SimLocationActuator
,
Boolean
>
hasMerged
;
private
LinkedHash
Map
<
SimLocationActuator
,
Long
>
mergedAtTime
;
// Waiting Groups, used for encounter strategy Wait. Includes remaining waiting time and last update time
public
Map
<
SocialMovementGroup
,
Tuple
<
Long
,
Long
>>
waitingGroups
;
public
LinkedHash
Map
<
SocialMovementGroup
,
Tuple
<
Long
,
Long
>>
waitingGroups
;
private
MovementGroupContainer
()
{
groups
=
new
LinkedHashSet
<>();
...
...
@@ -282,15 +277,15 @@ public class MovementGroupContainer {
*
* @author Marcel Verst
*/
public
Set
<
SimLocationActuator
>
getGroupMembers
(
SimLocationActuator
host
){
public
LinkedHash
Set
<
SimLocationActuator
>
getGroupMembers
(
SimLocationActuator
host
){
return
getGroupOfHost
(
host
).
getMembers
();
}
public
Set
<
SocialMovementGroup
>
getGroups
()
{
public
LinkedHash
Set
<
SocialMovementGroup
>
getGroups
()
{
return
groups
;
}
public
void
setGroups
(
Set
<
SocialMovementGroup
>
groups
)
{
public
void
setGroups
(
LinkedHash
Set
<
SocialMovementGroup
>
groups
)
{
this
.
groups
=
groups
;
}
...
...
@@ -307,23 +302,23 @@ public class MovementGroupContainer {
}
}
public
void
setLeftGroupAtTime
(
Map
<
SimLocationActuator
,
Long
>
leftGroupAtTime
)
{
public
void
setLeftGroupAtTime
(
LinkedHash
Map
<
SimLocationActuator
,
Long
>
leftGroupAtTime
)
{
this
.
leftGroupAtTime
=
leftGroupAtTime
;
}
public
Map
<
SimLocationActuator
,
Boolean
>
getHasMerged
()
{
public
LinkedHash
Map
<
SimLocationActuator
,
Boolean
>
getHasMerged
()
{
return
hasMerged
;
}
public
void
setHasMerged
(
Map
<
SimLocationActuator
,
Boolean
>
hasMerged
)
{
public
void
setHasMerged
(
LinkedHash
Map
<
SimLocationActuator
,
Boolean
>
hasMerged
)
{
this
.
hasMerged
=
hasMerged
;
}
public
Map
<
SimLocationActuator
,
Long
>
getMergedAtTime
()
{
public
LinkedHash
Map
<
SimLocationActuator
,
Long
>
getMergedAtTime
()
{
return
mergedAtTime
;
}
public
void
setMergedAtTime
(
Map
<
SimLocationActuator
,
Long
>
mergedAtTime
)
{
public
void
setMergedAtTime
(
LinkedHash
Map
<
SimLocationActuator
,
Long
>
mergedAtTime
)
{
this
.
mergedAtTime
=
mergedAtTime
;
}
}
\ No newline at end of file
src/de/tud/kom/p2psim/impl/topology/movement/modularosm/groups/SocialMovementGroup.java
View file @
8cc66195
...
...
@@ -22,7 +22,6 @@ package de.tud.kom.p2psim.impl.topology.movement.modularosm.groups;
import
java.util.LinkedHashSet
;
import
java.util.Random
;
import
java.util.Set
;
import
java.util.UUID
;
import
de.tud.kom.p2psim.api.topology.movement.SimLocationActuator
;
...
...
@@ -39,6 +38,7 @@ public class SocialMovementGroup {
public
final
UUID
groupID
;
private
Random
rand
=
Randoms
.
getRandom
(
SocialMovementGroup
.
class
);
private
SimLocationActuator
leader
;
private
LinkedHashSet
<
SimLocationActuator
>
members
;
...
...
@@ -67,7 +67,7 @@ public class SocialMovementGroup {
* @param Set<SimLocationActuator> All participants of the group.
* @param int The ID of the group.
*/
public
SocialMovementGroup
(
Set
<
SimLocationActuator
>
participants
)
{
public
SocialMovementGroup
(
LinkedHash
Set
<
SimLocationActuator
>
participants
)
{
this
.
groupID
=
UUID
.
randomUUID
();
...
...
@@ -115,8 +115,7 @@ public class SocialMovementGroup {
*/
public
SimLocationActuator
getRandomMember
()
{
if
(
members
.
size
()
>
1
)
{
Random
rand
=
Randoms
.
getRandom
(
SocialMovementGroup
.
class
);
if
(
members
.
size
()
>
1
)
{
int
item
=
rand
.
nextInt
(
members
.
size
()
-
1
);
int
i
=
0
;
...
...
@@ -170,11 +169,11 @@ public class SocialMovementGroup {
return
members
.
size
();
}
public
Set
<
SimLocationActuator
>
getMembers
()
{
return
members
;
public
LinkedHash
Set
<
SimLocationActuator
>
getMembers
()
{
return
new
LinkedHashSet
<
SimLocationActuator
>(
members
)
;
}
public
void
setMembers
(
Set
<
SimLocationActuator
>
participants
)
{
public
void
setMembers
(
LinkedHash
Set
<
SimLocationActuator
>
participants
)
{
this
.
members
=
new
LinkedHashSet
<>(
participants
);
}
...
...
src/de/tud/kom/p2psim/impl/topology/movement/modularosm/groups/groupencounter/AbstractGroupEncounter.java
View file @
8cc66195
...
...
@@ -22,8 +22,6 @@ package de.tud.kom.p2psim.impl.topology.movement.modularosm.groups.groupencounte
import
java.util.LinkedHashSet
;
import
java.util.Random
;
import
java.util.Set
;
import
de.tud.kom.p2psim.api.scenario.ConfigurationException
;
import
de.tud.kom.p2psim.api.topology.movement.SimLocationActuator
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.ISocialGroupMovementAnalyzer
;
...
...
@@ -100,14 +98,14 @@ public abstract class AbstractGroupEncounter implements IGroupEncounterBehavior
*
* @return
*/
private
Set
<
Pair
<
SocialMovementGroup
>>
getEncounteringGroups
()
{
private
LinkedHash
Set
<
Pair
<
SocialMovementGroup
>>
getEncounteringGroups
()
{
if
(!
enableGroupEncounters
)
return
null
;
Set
<
Pair
<
SocialMovementGroup
>>
encounteringGroups
=
new
LinkedHashSet
<>();
Set
<
SocialMovementGroup
>
alreadyProcessed
=
new
LinkedHashSet
<>();
LinkedHash
Set
<
Pair
<
SocialMovementGroup
>>
encounteringGroups
=
new
LinkedHashSet
<>();
LinkedHash
Set
<
SocialMovementGroup
>
alreadyProcessed
=
new
LinkedHashSet
<>();
Set
<
SocialMovementGroup
>
allGroups
=
groupCon
.
getGroups
();
LinkedHash
Set
<
SocialMovementGroup
>
allGroups
=
groupCon
.
getGroups
();
for
(
SocialMovementGroup
group1
:
allGroups
)
{
for
(
SocialMovementGroup
group2
:
allGroups
)
{
...
...
@@ -148,7 +146,7 @@ public abstract class AbstractGroupEncounter implements IGroupEncounterBehavior
if
(!
enableGroupEncounters
)
return
;
Set
<
Pair
<
SocialMovementGroup
>>
encounteringGroups
=
getEncounteringGroups
();
LinkedHash
Set
<
Pair
<
SocialMovementGroup
>>
encounteringGroups
=
getEncounteringGroups
();
if
(
encounteringGroups
==
null
||
encounteringGroups
.
isEmpty
())
{
return
;
...
...
@@ -269,7 +267,7 @@ public abstract class AbstractGroupEncounter implements IGroupEncounterBehavior
SocialMovementGroup
large
=
getLargerGroup
(
group1
,
group2
);
SocialMovementGroup
small
=
getSmallerGroup
(
group1
,
group2
);
Set
<
SimLocationActuator
>
toRemove
=
new
LinkedHashSet
<>(
small
.
getMembers
());
LinkedHash
Set
<
SimLocationActuator
>
toRemove
=
new
LinkedHashSet
<>(
small
.
getMembers
());
for
(
SimLocationActuator
participant
:
toRemove
)
{
small
.
removeHostFromGroup
(
participant
);
...
...
src/de/tud/kom/p2psim/impl/topology/movement/modularosm/groups/groupencounter/IGroupEncounterBehavior.java
View file @
8cc66195
...
...
@@ -20,11 +20,9 @@
package
de.tud.kom.p2psim.impl.topology.movement.modularosm.groups.groupencounter
;
import
java.util.Set
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.SocialGroupMovementModel
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.groups.SocialMovementGroup
;
import
de.tudarmstadt.maki.simonstrator.api.common.datastructures.Pair
;
/**
* Handles group encounters. Check group encounters based on the leaders location of {@link SocialMovementGroup}s.
...
...
src/de/tud/kom/p2psim/impl/topology/movement/modularosm/groups/groupforming/AbstractGroupForming.java
View file @
8cc66195
...
...
@@ -21,6 +21,7 @@
package
de.tud.kom.p2psim.impl.topology.movement.modularosm.groups.groupforming
;
import
java.util.LinkedHashMap
;
import
java.util.LinkedHashSet
;
import
java.util.Map
;
import
java.util.Random
;
import
java.util.Set
;
...
...
@@ -30,7 +31,7 @@ import de.tud.kom.p2psim.api.topology.movement.SimLocationActuator;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.ISocialGroupMovementAnalyzer
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.SocialGroupMovementModel
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.attraction.BasicAttractionPoint
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.attraction.IAttraction
Generato
r
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.attraction.IAttraction
Provide
r
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.attraction.hostcount.HostAtAttractionPointCounter
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.groups.SocialMovementGroup
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.groups.MovementGroupContainer
;
...
...
@@ -138,9 +139,14 @@ public abstract class AbstractGroupForming implements IGroupFormingBehavior {
stayDuration
.
put
(
host
.
getHost
().
getId
(),
new
Tuple
<
Long
,
Long
>(
0L
,
Time
.
getCurrentTime
()));
}
if
(!
enableGroups
)
{
return
;
}
for
(
int
g
=
0
;
g
<
maxNumberOfGroups
;
g
++)
{
long
delay
=
Math
.
max
(
Time
.
MINUTE
,
(
long
)
((
rand
.
nextDouble
()
*
(
Time
.
MINUTE
*
45
)
+
Time
.
MINUTE
)));
System
.
out
.
println
(
"("
+
g
+
") Init Group Formation Time "
+
Time
.
getFormattedTime
(
delay
)
);
//
System.out.println("("+g+") Init Group Formation Time " + Time.getFormattedTime(delay) );
Event
.
scheduleWithDelay
(
delay
,
new
EventHandler
()
{
@Override
...
...
@@ -183,7 +189,7 @@ public abstract class AbstractGroupForming implements IGroupFormingBehavior {
else
{
// int groupsize = (int) Math.max(1, rand.nextGaussian() * 0.93 + 2.76);
int
groupsize
=
rand
.
nextInt
(
maxGroupSize
-
minGroupSize
+
1
)
+
minGroupSize
;
System
.
out
.
println
(
"[AbstractGroupForming] Group Size: "
+
groupsize
+
" ("
+
minGroupSize
+
"/"
+
maxGroupSize
+
")"
);
//
System.out.println("[AbstractGroupForming] Group Size: " + groupsize + " ("+minGroupSize+"/"+maxGroupSize+")");
return
groupsize
;
}
//return rand.nextInt(maxGroupSize - minGroupSize) + minGroupSize;
...
...
@@ -194,7 +200,7 @@ public abstract class AbstractGroupForming implements IGroupFormingBehavior {
*
* @param Set<SimLocationActuator> The members which want to form a group.
*/
protected
void
createGroup
(
Set
<
SimLocationActuator
>
members
)
{
protected
void
createGroup
(
LinkedHash
Set
<
SimLocationActuator
>
members
)
{
SocialMovementGroup
group
=
new
SocialMovementGroup
(
members
);
// force a new attraction point assignment on the leader
...
...
@@ -293,7 +299,7 @@ public abstract class AbstractGroupForming implements IGroupFormingBehavior {
IAttractionPoint
result
=
null
;
long
maxDuration
=
0
;
for
(
IAttractionPoint
ap
:
IAttractionGenerator
.
a
ttractionPoints
)
{
for
(
IAttractionPoint
ap
:
movementModel
.
getA
ttractionPoints
()
)
{
for
(
SimLocationActuator
host
:
HostAtAttractionPointCounter
.
getHostsOfAttractionPoint
(
ap
,
movementModel
.
getAllLocationActuators
()))
{
INodeID
id
=
host
.
getHost
().
getId
();
long
duration
=
stayDuration
.
get
(
id
).
getA
();
...
...
@@ -311,7 +317,7 @@ public abstract class AbstractGroupForming implements IGroupFormingBehavior {
protected
IAttractionPoint
getAttractionPointWithMostHosts
()
{
IAttractionPoint
apCandidate
=
null
;
int
size
=
0
;
for
(
IAttractionPoint
ap
:
IAttractionGenerator
.
a
ttractionPoints
)
{
for
(
IAttractionPoint
ap
:
movementModel
.
getA
ttractionPoints
()
)
{
int
numberOfHostsInAP
=
HostAtAttractionPointCounter
.
getHostCountOfAttractionPoint
(
ap
,
movementModel
.
getAllLocationActuators
());
if
(
numberOfHostsInAP
>
size
)
{
apCandidate
=
ap
;
...
...
src/de/tud/kom/p2psim/impl/topology/movement/modularosm/groups/groupforming/DefaultGroupForming.java
View file @
8cc66195
...
...
@@ -23,12 +23,9 @@ package de.tud.kom.p2psim.impl.topology.movement.modularosm.groups.groupforming;
import
java.util.Collections
;
import
java.util.LinkedHashSet
;
import
java.util.LinkedList
;
import
java.util.Set
;
import
de.tud.kom.p2psim.api.topology.movement.SimLocationActuator
;
import
de.tud.kom.p2psim.api.topology.movement.local.LocalMovementStrategy
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.ISocialGroupMovementAnalyzer
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.attraction.IAttractionGenerator
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.attraction.hostcount.HostAtAttractionPointCounter
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.groups.SocialMovementGroup
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.transition.IAttractionAssigmentStrategy
;
...
...
@@ -92,17 +89,17 @@ public class DefaultGroupForming extends AbstractGroupForming {
@Override
protected
void
assembleGroup
()
{
IAttractionPoint
apCandidate
=
IAttractionGenerator
.
a
ttractionPoints
.
get
(
rand
.
nextInt
(
IAttractionGenerator
.
a
ttractionPoints
.
size
()));
IAttractionPoint
apCandidate
=
movementModel
.
getA
ttractionPoints
()
.
get
(
rand
.
nextInt
(
movementModel
.
getA
ttractionPoints
()
.
size
()));
if
(
apCandidate
==
null
)
{
return
;
}
Set
<
SimLocationActuator
>
hostsAtAttractionPoint
=
HostAtAttractionPointCounter
.
getHostsOfAttractionPoint
(
apCandidate
,
movementModel
.
getAllLocationActuators
());
LinkedHash
Set
<
SimLocationActuator
>
hostsAtAttractionPoint
=
HostAtAttractionPointCounter
.
getHostsOfAttractionPoint
(
apCandidate
,
movementModel
.
getAllLocationActuators
());
int
numberOfHostsInAttractionPoint
=
hostsAtAttractionPoint
.
size
();
int
groupSize
=
this
.
rndGroupSize
(
numberOfHostsInAttractionPoint
);
Set
<
SimLocationActuator
>
groupCandidates
=
new
LinkedHashSet
<>();
LinkedHash
Set
<
SimLocationActuator
>
groupCandidates
=
new
LinkedHashSet
<>();
// shuffle the hosts at the attraction point (more randomness ftw!)
LinkedList
<
SimLocationActuator
>
randomShuffledHostsAtAttractionPoint
=
new
LinkedList
<>(
hostsAtAttractionPoint
);
...
...
@@ -169,9 +166,9 @@ public class DefaultGroupForming extends AbstractGroupForming {
LocalMovementStrategy
movementStrategy
=
movementModel
.
getMovementStrategy
();
IAttractionAssigmentStrategy
transition
=
movementModel
.
getAttractionAssignmentStrategy
();
Set
<
SocialMovementGroup
>
groupsToRemove
=
new
LinkedHashSet
<>();
LinkedHash
Set
<
SocialMovementGroup
>
groupsToRemove
=
new
LinkedHashSet
<>();
Set
<
SocialMovementGroup
>
groups
=
groupCon
.
getGroups
();
LinkedHash
Set
<
SocialMovementGroup
>
groups
=
groupCon
.
getGroups
();
for
(
SocialMovementGroup
group
:
groups
)
{
SimLocationActuator
leader
=
group
.
getLeader
();
...
...
src/de/tud/kom/p2psim/impl/topology/movement/modularosm/transition/AbstractAttractionBasedAssignmentStrategy.java
View file @
8cc66195
...
...
@@ -22,16 +22,13 @@ package de.tud.kom.p2psim.impl.topology.movement.modularosm.transition;
import
java.util.LinkedHashMap
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Random
;
import
de.tud.kom.p2psim.api.topology.movement.SimLocationActuator
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.IAttractionBasedMovementAnalyzer
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.attraction.IAttraction
Generato
r
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.attraction.IAttraction
Provide
r
;
import
de.tudarmstadt.maki.simonstrator.api.Monitor
;
import
de.tudarmstadt.maki.simonstrator.api.Randoms
;
import
de.tudarmstadt.maki.simonstrator.api.Time
;
import
de.tudarmstadt.maki.simonstrator.api.component.sensor.location.IAttractionPoint
;
/**
...
...
@@ -43,12 +40,13 @@ import de.tudarmstadt.maki.simonstrator.api.component.sensor.location.IAttractio
public
abstract
class
AbstractAttractionBasedAssignmentStrategy
implements
IAttractionAssigmentStrategy
{
protected
Random
rnd
=
Randoms
.
getRandom
(
AbstractAttractionBasedAssignmentStrategy
.
class
);
protected
Map
<
SimLocationActuator
,
IAttractionPoint
>
assignments
=
new
LinkedHashMap
<>();
protected
Map
<
SimLocationActuator
,
IAttractionPoint
>
lastAssignments
=
new
LinkedHashMap
<>();
protected
IAttractionProvider
attractionProvider
;
protected
LinkedHashMap
<
SimLocationActuator
,
IAttractionPoint
>
assignments
=
new
LinkedHashMap
<>();
protected
LinkedHashMap
<
SimLocationActuator
,
IAttractionPoint
>
lastAssignments
=
new
LinkedHashMap
<>();
private
List
<
AttractionAssignmentListener
>
listeners
=
new
LinkedList
<>();
private
Linked
List
<
AttractionAssignmentListener
>
listeners
=
new
LinkedList
<>();
protected
long
defaultPauseTimeMin
=
0
;
protected
long
defaultPauseTimeMax
=
0
;
...
...
@@ -63,6 +61,10 @@ public abstract class AbstractAttractionBasedAssignmentStrategy implements IAttr
this
.
defaultPauseTimeMin
=
defaultPauseTimeMin
;
}
public
void
setAttractionProvider
(
IAttractionProvider
attractionProvider
)
{
this
.
attractionProvider
=
attractionProvider
;
}
@Override
public
IAttractionPoint
getAssignment
(
SimLocationActuator
host
)
{
return
assignments
.
get
(
host
);
...
...
@@ -137,8 +139,8 @@ public abstract class AbstractAttractionBasedAssignmentStrategy implements IAttr
protected
IAttractionPoint
getNewAttractionPointAssignment
(
SimLocationActuator
host
)
{
double
score
=
rnd
.
nextDouble
();
List
<
IAttractionPoint
>
candidates
=
new
LinkedList
<>();
for
(
IAttractionPoint
ap
:
IA
ttraction
Generator
.
a
ttractionPoints
)
{
Linked
List
<
IAttractionPoint
>
candidates
=
new
LinkedList
<>();
for
(
IAttractionPoint
ap
:
a
ttraction
Provider
.
getA
ttractionPoints
()
)
{
// skip null values (should never occur!)
if
(
ap
==
null
)
{
continue
;
...
...
@@ -167,7 +169,7 @@ public abstract class AbstractAttractionBasedAssignmentStrategy implements IAttr
// fallback: if no attraction point is considered, randomly select one, except the current assignment
if
(
candidates
.
isEmpty
())
{
candidates
.
addAll
(
IA
ttraction
Generator
.
a
ttractionPoints
);
candidates
.
addAll
(
a
ttraction
Provider
.
getA
ttractionPoints
()
);
if
(
assignments
.
containsKey
(
host
)
&&
candidates
.
size
()
>
1
)
{
candidates
.
remove
(
assignments
.
get
(
host
));
...
...
@@ -181,7 +183,7 @@ public abstract class AbstractAttractionBasedAssignmentStrategy implements IAttr
@Override
public
boolean
hostInAttractionPointArea
(
SimLocationActuator
host
)
{
for
(
IAttractionPoint
ap
:
IA
ttraction
Generator
.
a
ttractionPoints
)
{
for
(
IAttractionPoint
ap
:
a
ttraction
Provider
.
getA
ttractionPoints
()
)
{
if
(
ap
.
distanceTo
(
host
.
getRealPosition
())
<=
ap
.
getRadius
())
{
return
true
;
}
...
...
src/de/tud/kom/p2psim/impl/topology/movement/modularosm/transition/AttractionPointRoamingStrategy.java
View file @
8cc66195
...
...
@@ -25,7 +25,7 @@ import java.util.Map;
import
de.tud.kom.p2psim.api.topology.movement.SimLocationActuator
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.ISocialGroupMovementAnalyzer
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.ModularMovementModel
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.attraction.IAttraction
Generato
r
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.attraction.IAttraction
Provide
r
;
import
de.tudarmstadt.maki.simonstrator.api.Event
;
import
de.tudarmstadt.maki.simonstrator.api.EventHandler
;
import
de.tudarmstadt.maki.simonstrator.api.Monitor
;
...
...
@@ -101,7 +101,7 @@ public class AttractionPointRoamingStrategy extends AbstractAttractionBasedAssig
IAttractionPoint
currentAttractionPoint
=
this
.
assignments
.
get
(
comp
);
// if the attraction point was removed in the meantime, go directly to transit state
if
(
currentAttractionPoint
==
null
||
!
IA
ttraction
Generator
.
a
ttractionPoints
.
contains
(
currentAttractionPoint
))
{
if
(
currentAttractionPoint
==
null
||
!
a
ttraction
Provider
.
getA
ttractionPoints
()
.
contains
(
currentAttractionPoint
))
{
this
.
addComponent
(
comp
);
}
else
{
...
...
src/de/tud/kom/p2psim/impl/topology/movement/modularosm/transition/FixedAssignmentStrategy.java
View file @
8cc66195
...
...
@@ -28,7 +28,7 @@ import de.tud.kom.p2psim.api.common.SimHost;
import
de.tud.kom.p2psim.api.common.SimHostComponent
;
import
de.tud.kom.p2psim.api.topology.movement.SimLocationActuator
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.ModularMovementModel
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.attraction.IAttraction
Generato
r
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.attraction.IAttraction
Provide
r
;
import
de.tudarmstadt.maki.simonstrator.api.component.sensor.location.IAttractionPoint
;
/**
...
...
@@ -62,14 +62,14 @@ public class FixedAssignmentStrategy extends AbstractAttractionBasedAssignmentSt
// No assignments been done before.
if
(
assignments
.
isEmpty
())
{
IAttractionPoint
aPoint
=
IA
ttraction
Generator
.
a
ttractionPoints
.
iterator
().
next
();
IAttractionPoint
aPoint
=
a
ttraction
Provider
.
getA
ttractionPoints
()
.
iterator
().
next
();
assignments
.
put
(
ms
,
aPoint
);
mappingGroupId
(
ms
,
aPoint
);
}
// GroupId is not mapped.
else
if
(!
mappingGroupIdAP
.
containsKey
(
mappingMSHost
.
get
(
ms
)
.
getProperties
().
getGroupID
()))
{
for
(
IAttractionPoint
actAP
:
IA
ttraction
Generator
.
a
ttractionPoints
)
{
for
(
IAttractionPoint
actAP
:
a
ttraction
Provider
.
getA
ttractionPoints
()
)
{
if
(!
mappingAPGroupId
.
containsKey
(
actAP
))
{
assignments
.
put
(
ms
,
actAP
);
mappingGroupId
(
ms
,
actAP
);
...
...
src/de/tud/kom/p2psim/impl/topology/movement/modularosm/transition/IAttractionAssigmentStrategy.java
View file @
8cc66195
...
...
@@ -21,6 +21,7 @@
package
de.tud.kom.p2psim.impl.topology.movement.modularosm.transition
;
import
de.tud.kom.p2psim.api.topology.movement.SimLocationActuator
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.attraction.IAttractionProvider
;
import
de.tudarmstadt.maki.simonstrator.api.component.sensor.location.IAttractionPoint
;
/**
...
...
@@ -50,6 +51,8 @@ public interface IAttractionAssigmentStrategy {
public
void
removeAttractionAssignmentListener
(
AttractionAssignmentListener
listener
);
public
void
setAttractionProvider
(
IAttractionProvider
attractionProvider
);
/**
* Add the object and assign the MS to an {@link IAttractionPoint}.
*
...
...
src/de/tud/kom/p2psim/impl/topology/movement/modularosm/transition/InAreaRoamingTransitionStrategy.java
View file @
8cc66195
...
...
@@ -25,7 +25,7 @@ import java.util.Map;
import
de.tud.kom.p2psim.api.topology.movement.SimLocationActuator
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.ISocialGroupMovementAnalyzer
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.ModularMovementModel
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.attraction.IAttraction
Generato
r
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.attraction.IAttraction
Provide
r
;
import
de.tudarmstadt.maki.simonstrator.api.Event
;
import
de.tudarmstadt.maki.simonstrator.api.EventHandler
;
import
de.tudarmstadt.maki.simonstrator.api.Monitor
;
...
...
@@ -86,7 +86,8 @@ public class InAreaRoamingTransitionStrategy extends AbstractAttractionBasedAssi
this
.
roamingStates
.
put
(
comp
,
roamingTransitionState
.
PAUSE
);
// schedule roaming
Event
.
scheduleWithDelay
(
gaussianDistributionPauseTime
(
5
*
Time
.
MINUTE
,
Time
.
MINUTE
),
this
,
comp
,
EVENT_ROAMING_PAUSE_ENDED
);
//Event.scheduleWithDelay(gaussianDistributionPauseTime(5 * Time.MINUTE, Time.MINUTE), this, comp, EVENT_ROAMING_PAUSE_ENDED);
Event
.
scheduleWithDelay
(
15
*
Time
.
SECOND
,
this
,
comp
,
EVENT_ROAMING_PAUSE_ENDED
);
}
...
...
@@ -146,7 +147,7 @@ public class InAreaRoamingTransitionStrategy extends AbstractAttractionBasedAssi
IAttractionPoint
currentAttractionPoint
=
this
.
assignments
.
get
(
comp
);
// if the attraction point was removed in the meantime, go directly to transit state
if
(
currentAttractionPoint
==
null
||
!
IA
ttraction
Generator
.
a
ttractionPoints
.
contains
(
currentAttractionPoint
))
{
if
(
currentAttractionPoint
==
null
||
!
a
ttraction
Provider
.
getA
ttractionPoints
()
.
contains
(
currentAttractionPoint
))
{
this
.
addComponent
(
comp
);
}
else
{
...
...
src/de/tud/kom/p2psim/impl/topology/movement/modularosm/transition/RandomInAreaTransitionStrategy.java
View file @
8cc66195
...
...
@@ -5,7 +5,7 @@ import java.util.Map;
import
de.tud.kom.p2psim.api.topology.Topology
;
import
de.tud.kom.p2psim.api.topology.movement.SimLocationActuator
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.attraction.BasicAttractionPoint
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.attraction.IAttraction
Generato
r
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.attraction.IAttraction
Provide
r
;
import
de.tud.kom.p2psim.impl.topology.util.PositionVector
;
import
de.tudarmstadt.maki.simonstrator.api.Binder
;
import
de.tudarmstadt.maki.simonstrator.api.Monitor
;
...
...
@@ -47,7 +47,7 @@ public class RandomInAreaTransitionStrategy extends AbstractAttractionBasedAssig
if
(!
assignments
.
containsKey
(
ms
))
{
IAttractionPoint
aPoint
=
IA
ttraction
Generator
.
a
ttractionPoints
.
iterator
().
next
();
IAttractionPoint
aPoint
=
a
ttraction
Provider
.
getA
ttractionPoints
()
.
iterator
().
next
();
assignments
.
put
(
ms
,
aPoint
);
currentTarget
.
put
(
ms
,
nextRandomPosition
(
aPoint
,
defaultRadius
));
currentSearchRadius
.
put
(
ms
,
defaultRadius
);
...
...
src/de/tud/kom/p2psim/impl/topology/movement/modularosm/transition/SocialTransitionStrategy.java
View file @
8cc66195
...
...
@@ -36,7 +36,7 @@ import de.tud.kom.p2psim.api.scenario.ConfigurationException;
import
de.tud.kom.p2psim.api.topology.Topology
;
import
de.tud.kom.p2psim.api.topology.movement.SimLocationActuator
;
import
de.tud.kom.p2psim.api.topology.social.SocialView
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.attraction.IAttraction
Generato
r
;
import
de.tud.kom.p2psim.impl.topology.movement.modularosm.attraction.IAttraction
Provide
r
;
import
de.tud.kom.p2psim.impl.topology.util.PositionVector
;
import
de.tudarmstadt.maki.simonstrator.api.Binder
;
import
de.tudarmstadt.maki.simonstrator.api.Event
;
...
...
@@ -146,8 +146,8 @@ public class SocialTransitionStrategy extends AbstractAttractionBasedAssignmentS
// position.
// TODO: needed? We do Transition as next, and this will delete the
// assignment..
IAttractionPoint
nearest
=
IA
ttraction
Generator
.
a
ttractionPoints
.
iterator
().
next
();
for
(
IAttractionPoint
aPoint
:
IA
ttraction
Generator
.
a
ttractionPoints
)
{
IAttractionPoint
nearest
=
a
ttraction
Provider
.
getA
ttractionPoints
()
.
iterator
().
next
();
for
(
IAttractionPoint
aPoint
:
a
ttraction
Provider
.
getA
ttractionPoints
()
)
{
if
(
nearest
.
distanceTo
(
ms
.
getRealPosition
())
>
aPoint
.
distanceTo
(
ms
.
getRealPosition
()))
{
nearest
=
aPoint
;
...
...
@@ -181,7 +181,7 @@ public class SocialTransitionStrategy extends AbstractAttractionBasedAssignmentS
List
<
IAttractionPoint
>
apFriends
=
getFriendsPlaces
(
ms
);
List
<
IAttractionPoint
>
apClusters
=
getClusterPlaces
(
ms
);
List
<
IAttractionPoint
>
apRandom
=
getRandomPlaces
(
ms
,
(
int
)
Math
.
max
(
IA
ttraction
Generator
.
a
ttractionPoints
.
size
()
*
0.2
,
5
));
(
int
)
Math
.
max
(
a
ttraction
Provider
.
getA
ttractionPoints
()
.
size
()
*
0.2
,
5
));
IAttractionPoint
ap
=
null
;
if
(
rnd
.
nextDouble
()
<
socialFactor
)
{
...
...
@@ -299,7 +299,7 @@ public class SocialTransitionStrategy extends AbstractAttractionBasedAssignmentS
private
List
<
IAttractionPoint
>
getRandomPlaces
(
SimLocationActuator
ms
,
int
number
)
{
List
<
IAttractionPoint
>
result
=
new
Vector
<
IAttractionPoint
>(
IA
ttraction
Generator
.
a
ttractionPoints
);
List
<
IAttractionPoint
>
result
=
new
Vector
<
IAttractionPoint
>(
a
ttraction
Provider
.
getA
ttractionPoints
()
);
Collections
.
shuffle
(
result
,
rnd
);
return
result
.
subList
(
0
,
Math
.
min
(
result
.
size
(),
number
));
}
...
...
@@ -339,7 +339,7 @@ public class SocialTransitionStrategy extends AbstractAttractionBasedAssignmentS
private
void
assignFavoritePlaces
(
SimLocationActuator
ms
)
{
Set
<
IAttractionPoint
>
msFavoritePlaces
=
new
LinkedHashSet
<
IAttractionPoint
>();
LinkedList
<
IAttractionPoint
>
temp
=
new
LinkedList
<
IAttractionPoint
>(
IA
ttraction
Generator
.
a
ttractionPoints
);
a
ttraction
Provider
.
getA
ttractionPoints
()
);
Collections
.
shuffle
(
temp
,
rnd
);
for
(
int
i
=
0
;
i
<
numberOfFavoritePlaces
;
i
++)
{
if
(!
temp
.
isEmpty
())
{
...
...
src/de/tud/kom/p2psim/impl/util/oracle/GlobalOracle.java
View file @
8cc66195
...
...
@@ -40,6 +40,7 @@ import de.tudarmstadt.maki.simonstrator.api.component.ComponentNotAvailableExcep
import
de.tudarmstadt.maki.simonstrator.api.component.core.OracleComponent
;
import
de.tudarmstadt.maki.simonstrator.api.component.network.NetID
;
import
de.tudarmstadt.maki.simonstrator.api.component.network.NetInterface
;
import
de.tudarmstadt.maki.simonstrator.api.component.sensor.location.IAttractionPoint
;
import
de.tudarmstadt.maki.simonstrator.api.component.topology.TopologyID
;
import
de.tudarmstadt.maki.simonstrator.api.component.topology.TopologyProvider
;
...
...
@@ -64,6 +65,8 @@ public class GlobalOracle implements OracleComponent {
private
static
List
<
NetID
>
bootstrapList
=
new
LinkedList
<
NetID
>();
private
static
GlobalOracle
instance
=
new
GlobalOracle
();
private
static
Set
<
IAttractionPoint
>
attractionPoints
=
new
LinkedHashSet
<
IAttractionPoint
>();
private
GlobalOracle
()
{
//
...
...
@@ -72,6 +75,18 @@ public class GlobalOracle implements OracleComponent {
public
static
GlobalOracle
getInstance
()
{
return
instance
;
}
public
static
void
addAttractionPoint
(
IAttractionPoint
attractionPoint
)
{
GlobalOracle
.
attractionPoints
.
add
(
attractionPoint
);
}
public
static
void
removeAttractionPoint
(
IAttractionPoint
attractionPoint
)
{
GlobalOracle
.
attractionPoints
.
remove
(
attractionPoint
);
}
public
static
Set
<
IAttractionPoint
>
getAttractionPoints
()
{
return
attractionPoints
;
}
/**
* Initial population with hosts.
...
...
Prev
1
2
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment