use of jcog.math.tensor.Tensor in project narchy by automenta.
the class TensorGlow method main.
public static void main(String[] args) {
PhyWall p = SpaceGraph.wall(1200, 1000);
p.W.setGravity(new v2(0, -2.8f));
staticBox(p.W, -5, -8, +5, 2f, false, true, true, true);
for (int j = 0; j < 3; j++) {
BodyDef bodyDef2 = new BodyDef();
bodyDef2.type = BodyType.DYNAMIC;
// otocenie
bodyDef2.angle = -0.6f;
// smer pohybu
bodyDef2.linearVelocity = new v2(0.0f, 0.0f);
// rotacia (rychlost rotacie)
bodyDef2.angularVelocity = 0.0f;
Body2D newBody = p.W.addBody(bodyDef2);
PolygonShape shape2 = new PolygonShape();
shape2.setAsBox(0.25f, 0.25f);
Fixture f = newBody.addFixture(shape2, 1.0f);
// trenie
f.friction = 0.5f;
// odrazivost
f.restitution = 0.0f;
f.material = new Uniform();
f.material.m_rigidity = 1.0f;
}
// //ceiling rack
// addBox(p.W, -1, +0.4f, 0, +0.65f, false, true, true, true);
// new Pacman(p.W);
{
p.W.setContactListener(new Explosives.ExplosionContacts());
TheoJansen t = new TheoJansen(p.W, 0.35f);
PhyWall.PhyWindow pw = p.put(new Gridding(0.5f, new Port((float[] v) -> {
// System.out.println(v);
t.motorJoint.setMotorSpeed(v[0] * 2 - v[1] * 2);
t.motorJoint.setMaxMotorTorque(v[2]);
t.motorJoint.enableLimit(true);
t.motorJoint.setLimits((float) (-v[3] * Math.PI), (float) (+v[4] * Math.PI));
if (v[5] > 0.5f) {
t.gun.fire();
}
t.turretJoint.setLimits((float) (+Math.PI / 2 + v[6] * Math.PI - 0.1f), (float) (+Math.PI / 2 + v[6] * Math.PI + 0.1f));
})), 0.8f, 0.4f);
p.W.addJoint(new RevoluteJoint(p.W, new RevoluteJointDef(pw.body, t.chassis)));
}
{
p.W.setParticleRadius(0.05f);
p.W.setParticleDamping(0.1f);
CircleShape shape = new CircleShape();
shape.center.set(0, 10);
shape.radius = 2f;
ParticleGroupDef pd = new ParticleGroupDef();
pd.flags = ParticleType.b2_waterParticle;
// b2_viscousParticle;
// b2_elasticParticle;
// b2_springParticle;
// b2_powderParticle;
pd.color = new ParticleColor(0.7f, 0.1f, 0.1f, 0.8f);
pd.shape = shape;
p.W.addParticles(pd);
}
HaiQae q = new HaiQae(8, 2);
float[] in = new float[q.ae.inputs()];
final Tensor randomVector = Tensor.randomVectorGauss(in.length, 0, 1, rng);
final FloatRange lerpRate = new FloatRange(0.01f, 0, 1f);
final TensorLERP lerpVector = new TensorLERP(randomVector, lerpRate);
PhyWall.PhyWindow w = p.put(new Gridding(0.25f, new AutoUpdateMatrixView(lerpVector.data), new LabeledPane("lerp", new XYSlider().on((x, y) -> {
lerpRate.set(x);
})), new LabeledPane("out", new Port((x) -> {
}) {
@Override
public void prePaint(int dtMS) {
super.prePaint(dtMS);
out(lerpVector.data);
}
})), 0.5f, 0.5f);
p.put(new TogglePort(), 0.25f, 0.25f);
PhyWall.PhyWindow qw = p.put(new Gridding(new Label("HaiQ"), new AutoSurface<>(q), new LabeledPane("input", new Port((float[] i) -> {
System.arraycopy(i, 0, in, 0, i.length);
})), new Gridding(VERTICAL, new AutoUpdateMatrixView(in), new AutoUpdateMatrixView(q.ae.x), new AutoUpdateMatrixView(q.ae.W), new AutoUpdateMatrixView(q.ae.y)), new Gridding(VERTICAL, new AutoUpdateMatrixView(q.q), new AutoUpdateMatrixView(q.et))), 1, 1);
Loop.of(() -> {
lerpVector.update();
q.act((((float) Math.random()) - 0.5f) * 2, in);
}).runFPS(25);
}
use of jcog.math.tensor.Tensor in project narchy by automenta.
the class BagTest method testBagSamplingDistribution.
static void testBagSamplingDistribution(Bag<PLink<String>, PLink<String>> bag, float batchSizeProp) {
// bag.forEach(System.out::println);
int cap = bag.capacity();
int batchSize = (int) Math.ceil(batchSizeProp * cap);
int batches = cap * 1000 / batchSize;
Tensor f1 = samplingPriDist(bag, batches, batchSize, Math.min(10, Math.max(2, cap / 2)));
String h = "cap=" + cap + " total=" + (batches * batchSize);
System.out.println(h + ":\n\t" + f1.tsv2());
System.out.println();
float[] ff = f1.get();
// monotonically increasing
// TODO minimize this
float orderThresh = 0.1f;
for (int j = 0; j < ff.length; j++) {
for (int i = j + 1; i < ff.length; i++) {
float diff = ff[j] - ff[i];
boolean unordered = diff > orderThresh;
if (unordered) {
fail("sampling distribution not ordered. contents=" + bag.toString());
}
}
}
// should be higher
final float MIN_RATIO = 1.5f;
for (int lows : ff.length > 4 ? new int[] { 0, 1 } : new int[] { 0 }) {
for (int highs : ff.length > 4 ? new int[] { ff.length - 1, ff.length - 2 } : new int[] { ff.length - 1 }) {
float maxMinRatio = ff[highs] / ff[lows];
assertTrue(maxMinRatio > MIN_RATIO, maxMinRatio + " ratio between max and min");
}
}
// TODO verify the histogram resulting from the above execution is relatively flat:
// ex: [0.21649484536082475, 0.2268041237113402, 0.28865979381443296, 0.26804123711340205]
// the tests below assume that it begins with a relatively flat distribution
// System.out.println(Arrays.toString(bag.priHistogram(4)));
// System.out.println(Arrays.toString(bag.priHistogram(8)));
// System.out.print("Sampling: " );
// printDist(samplingPriDistribution((CurveBag) n.core.concepts, 1000));
// System.out.print("Priority: " );
// EmpiricalDistribution pri;
// printDist(pri = getSamplingPriorityDistribution(n.core.concepts, 1000));
//
// List<SummaryStatistics> l = pri.getBinStats();
// assertTrue(l.get(0).getN() < l.get(l.size() - 1).getN());
}
use of jcog.math.tensor.Tensor in project narchy by automenta.
the class TensorTest method test1DTensorChain.
@Test
public void test1DTensorChain() {
ArrayTensor a = new ArrayTensor(4);
a.set(1, 2);
ArrayTensor b = new ArrayTensor(2);
b.set(2, 0);
Tensor ab = TensorChain.get(a, b);
assertEquals(1, ab.shape().length);
assertEquals(6, ab.shape()[0]);
final String[] s = { "" };
ab.forEach((i, v) -> s[0] += v + " ");
assertEquals("[0.0 0.0 1.0 0.0 2.0 0.0 ]", Arrays.toString(s));
}
use of jcog.math.tensor.Tensor in project narchy by automenta.
the class AgentBuilder method get.
public WiredAgent get() {
final int inputs = sensors.stream().mapToInt(Tensor::volume).sum();
final int outputs = actions.stream().mapToInt(IntObjectPair::getOne).sum() + (NOP_ACTION ? 1 : 0);
Consumer<float[]> inputter = (f) -> {
int s = sensors.size();
int j = 0;
for (int i = 0; i < s; i++) {
Tensor x = sensors.get(i);
x.writeTo(f, j);
j += x.volume();
}
assert (j == f.length);
};
IntConsumer act = (c) -> {
int s = actions.size();
for (int i = 0; i < s; i++) {
IntObjectPair<? extends IntConsumer> aa = actions.get(i);
int bb = aa.getOne();
if (c >= bb) {
c -= bb;
} else {
aa.getTwo().accept(c);
return;
}
}
};
return new WiredAgent(a, inputs, inputter, reward, outputs, act);
}
Aggregations