Create struct ConvLFreeSet

This commit is contained in:
2017-04-30 09:12:25 -04:00
parent 3ded5cd96f
commit 1e45817d76
14 changed files with 851 additions and 808 deletions

View File

@@ -25,6 +25,7 @@ extern "C" {
#include <multirow/lfree2d.h>
#include <multirow/cg.h>
#include <infinity/greedy-nd.h>
#include "../src/greedy-nd.c"
}
int ENABLE_LIFTING = 0;
@@ -242,8 +243,8 @@ TEST(GreedyNDTest, bound_test_1)
double epsilon;
int tx[6];
rval = GREEDY_ND_bound(2, 6, f, rays, x, beta1, &epsilon, tx);
abort_if(rval, "GREEDY_ND_bound failed");
rval = bound(2, 6, f, rays, x, beta1, &epsilon, tx);
abort_if(rval, "bound failed");
EXPECT_NEAR(epsilon, 0.5, 1e-6);
EXPECT_TRUE(tx[0]);
EXPECT_FALSE(tx[1]);
@@ -252,8 +253,8 @@ TEST(GreedyNDTest, bound_test_1)
EXPECT_FALSE(tx[4]);
EXPECT_FALSE(tx[5]);
rval = GREEDY_ND_bound(2, 6, f, rays, x, beta2, &epsilon, tx);
abort_if(rval, "GREEDY_ND_bound failed");
rval = bound(2, 6, f, rays, x, beta2, &epsilon, tx);
abort_if(rval, "bound failed");
EXPECT_NEAR(epsilon, 1.0, 1e-6);
EXPECT_TRUE(tx[0]);
EXPECT_FALSE(tx[1]);
@@ -262,8 +263,8 @@ TEST(GreedyNDTest, bound_test_1)
EXPECT_TRUE(tx[4]);
EXPECT_TRUE(tx[5]);
rval = GREEDY_ND_bound(2, 6, f, rays, x, beta3, &epsilon, tx);
abort_if(rval, "GREEDY_ND_bound failed");
rval = bound(2, 6, f, rays, x, beta3, &epsilon, tx);
abort_if(rval, "bound failed");
EXPECT_EQ(epsilon, INFINITY);
EXPECT_FALSE(tx[0]);
EXPECT_FALSE(tx[1]);
@@ -371,10 +372,9 @@ TEST(GreedyNDTest, generate_cut_test_1)
double r3[] = { -1.0, 1.0 };
double r4[] = { 0.0, 1.0 };
double r5[] = { 1.0, 0.0 };
double beta[6];
struct MultiRowModel model;
CG_malloc_model(&model, 2, 6);
CG_init_model(&model, 2, 6);
LFREE_push_ray(&model.rays, r0);
LFREE_push_ray(&model.rays, r1);
LFREE_push_ray(&model.rays, r2);
@@ -384,15 +384,18 @@ TEST(GreedyNDTest, generate_cut_test_1)
model.f[0] = 0.5;
model.f[1] = 0.5;
rval = GREEDY_ND_generate_cut(&model, beta);
abort_if(rval, "GREEDY_ND_generate_cut failed");
struct ConvLFreeSet lfree;
LFREE_init_conv(&lfree, 2, 6);
EXPECT_NEAR(beta[0], 0.5, 1e-6);
EXPECT_NEAR(beta[1], 0.5, 1e-6);
EXPECT_NEAR(beta[2], 0.5, 1e-6);
EXPECT_NEAR(beta[3], 0.5, 1e-6);
EXPECT_NEAR(beta[4], 1.0, 1e-6);
EXPECT_NEAR(beta[5], 1.0, 1e-6);
rval = INFINITY_ND_generate_lfree(&model, &lfree);
abort_if(rval, "INFINITY_ND_generate_lfree failed");
EXPECT_NEAR(lfree.beta[0], 0.5, 1e-6);
EXPECT_NEAR(lfree.beta[1], 0.5, 1e-6);
EXPECT_NEAR(lfree.beta[2], 0.5, 1e-6);
EXPECT_NEAR(lfree.beta[3], 0.5, 1e-6);
EXPECT_NEAR(lfree.beta[4], 1.0, 1e-6);
EXPECT_NEAR(lfree.beta[5], 1.0, 1e-6);
CLEANUP:
if(rval) FAIL();
@@ -408,10 +411,9 @@ TEST(GreedyNDTest, generate_cut_test_2)
double r3[] = { 0.0, -1.0, 0.0 };
double r4[] = { 0.0, 0.0, 1.0 };
double r5[] = { 0.0, 0.0, -1.0 };
double beta[6];
struct MultiRowModel model;
CG_malloc_model(&model, 3, 6);
CG_init_model(&model, 3, 6);
LFREE_push_ray(&model.rays, r0);
LFREE_push_ray(&model.rays, r1);
LFREE_push_ray(&model.rays, r2);
@@ -422,15 +424,18 @@ TEST(GreedyNDTest, generate_cut_test_2)
model.f[1] = 0.75;
model.f[2] = 0.75;
rval = GREEDY_ND_generate_cut(&model, beta);
abort_if(rval, "GREEDY_ND_generate_cut failed");
struct ConvLFreeSet lfree;
LFREE_init_conv(&lfree, 3, 6);
EXPECT_NEAR(beta[0], 0.75, 1e-6);
EXPECT_NEAR(beta[1], 2.25, 1e-6);
EXPECT_NEAR(beta[2], 0.75, 1e-6);
EXPECT_NEAR(beta[3], 2.25, 1e-6);
EXPECT_NEAR(beta[4], 0.75, 1e-6);
EXPECT_NEAR(beta[5], 2.25, 1e-6);
rval = INFINITY_ND_generate_lfree(&model, &lfree);
abort_if(rval, "INFINITY_ND_generate_lfree failed");
EXPECT_NEAR(lfree.beta[0], 0.75, 1e-6);
EXPECT_NEAR(lfree.beta[1], 2.25, 1e-6);
EXPECT_NEAR(lfree.beta[2], 0.75, 1e-6);
EXPECT_NEAR(lfree.beta[3], 2.25, 1e-6);
EXPECT_NEAR(lfree.beta[4], 0.75, 1e-6);
EXPECT_NEAR(lfree.beta[5], 2.25, 1e-6);
CLEANUP:
CG_free_model(&model);

View File

@@ -30,7 +30,6 @@ extern "C" {
TEST(Infinity2DTest, test_generate_cut_1)
{
int rval = 0;
double bounds[100];
double f[] = {1 / 4.0, 3 / 4.0};
double rays[] = {
@@ -43,14 +42,17 @@ TEST(Infinity2DTest, test_generate_cut_1)
const struct MultiRowModel model = {f , rays, 5, 2};
rval = INFINITY_2D_generate_cut(&model, bounds);
abort_if(rval, "INFINITY_2D_generate_cut failed");
struct ConvLFreeSet lfree;
LFREE_init_conv(&lfree, 2, 5);
EXPECT_NEAR(23 / 50.0, bounds[0], BOUNDS_EPSILON);
EXPECT_NEAR(23 / 42.0, bounds[1], BOUNDS_EPSILON);
EXPECT_NEAR(9 / 11.0, bounds[2], BOUNDS_EPSILON);
EXPECT_NEAR(9 / 11.0, bounds[3], BOUNDS_EPSILON);
EXPECT_NEAR(23 / 50.0, bounds[4], BOUNDS_EPSILON);
rval = INFINITY_2D_generate_lfree(&model, &lfree);
abort_if(rval, "INFINITY_2D_generate_lfree failed");
EXPECT_NEAR(23 / 50.0, lfree.beta[0], BOUNDS_EPSILON);
EXPECT_NEAR(23 / 42.0, lfree.beta[1], BOUNDS_EPSILON);
EXPECT_NEAR(9 / 11.0, lfree.beta[2], BOUNDS_EPSILON);
EXPECT_NEAR(9 / 11.0, lfree.beta[3], BOUNDS_EPSILON);
EXPECT_NEAR(23 / 50.0, lfree.beta[4], BOUNDS_EPSILON);
CLEANUP:
if (rval) FAIL();
@@ -59,7 +61,6 @@ TEST(Infinity2DTest, test_generate_cut_1)
TEST(Infinity2DTest, test_generate_cut_2)
{
int rval = 0;
double bounds[100];
double f[] = {1 / 2.0, 1 / 2.0};
double rays[] = {
-1.0, -1.0,
@@ -70,15 +71,17 @@ TEST(Infinity2DTest, test_generate_cut_2)
};
const struct MultiRowModel model = {f , rays, 5, 2};
struct ConvLFreeSet lfree;
LFREE_init_conv(&lfree, 2, 5);
rval = INFINITY_2D_generate_cut(&model, bounds);
abort_if(rval, "INFINITY_2D_generate_cut failed");
rval = INFINITY_2D_generate_lfree(&model, &lfree);
abort_if(rval, "INFINITY_2D_generate_lfree failed");
EXPECT_NEAR(0.5, bounds[0], BOUNDS_EPSILON);
EXPECT_NEAR(0.5, bounds[1], BOUNDS_EPSILON);
EXPECT_NEAR(0.5, bounds[2], BOUNDS_EPSILON);
EXPECT_EQ(GREEDY_BIG_E, bounds[3]);
EXPECT_NEAR(0.5, bounds[4], BOUNDS_EPSILON);
EXPECT_NEAR(0.5, lfree.beta[0], BOUNDS_EPSILON);
EXPECT_NEAR(0.5, lfree.beta[1], BOUNDS_EPSILON);
EXPECT_NEAR(0.5, lfree.beta[2], BOUNDS_EPSILON);
EXPECT_EQ(GREEDY_BIG_E, lfree.beta[3]);
EXPECT_NEAR(0.5, lfree.beta[4], BOUNDS_EPSILON);
CLEANUP:
if (rval) FAIL();
@@ -87,18 +90,19 @@ TEST(Infinity2DTest, test_generate_cut_2)
TEST(Infinity2DTest, test_generate_cut_3)
{
int rval = 0;
double bounds[100];
double f[] = {5 / 22.0, 0.0};
double rays[] = {-1 / 22.0, 0.0, 0.0, 1 / 18.0, 1 / 22.0, 0.0};
const struct MultiRowModel model = {f , rays, 3, 2};
struct ConvLFreeSet lfree;
LFREE_init_conv(&lfree, 2, 5);
rval = INFINITY_2D_generate_cut(&model, bounds);
abort_if(rval, "INFINITY_2D_generate_cut failed");
rval = INFINITY_2D_generate_lfree(&model, &lfree);
abort_if(rval, "INFINITY_2D_generate_lfree failed");
EXPECT_NEAR(5.0, bounds[0], BOUNDS_EPSILON);
EXPECT_NEAR(17.0, bounds[2], BOUNDS_EPSILON);
EXPECT_EQ(GREEDY_BIG_E, bounds[1]);
EXPECT_NEAR(5.0, lfree.beta[0], BOUNDS_EPSILON);
EXPECT_NEAR(17.0, lfree.beta[2], BOUNDS_EPSILON);
EXPECT_EQ(GREEDY_BIG_E, lfree.beta[1]);
CLEANUP:
if (rval) FAIL();
@@ -277,8 +281,8 @@ TEST(Infinity2DTest, find_containing_cone_test_3)
// double rays[] = {0, -1 / 38.0, -1 / 22.0, -1 / 38.0, 0, 1 / 38.0, -1 / 22.0,
// 0, 1 / 22.0, 0, 1 / 22.0, 1 / 38.0};
//
// rval = INFINITY_2D_generate_cut(rays, 6, f, bounds);
// abort_if(rval, "INFINITY_2D_generate_cut failed");
// rval = INFINITY_2D_generate_lfree(rays, 6, f, bounds);
// abort_if(rval, "INFINITY_2D_generate_lfree failed");
//
// EXPECT_NEAR(20.0, bounds[0], BOUNDS_EPSILON);
// EXPECT_NEAR(20.0, bounds[1], BOUNDS_EPSILON);
@@ -303,8 +307,8 @@ TEST(Infinity2DTest, find_containing_cone_test_3)
// 0.04545454545454545581, 0.00000000000000000000,
// 0.04545454545454545581, 0.02631578947368420907};
//
// rval = INFINITY_2D_generate_cut(rays, 6, f, bounds);
// abort_if(rval, "INFINITY_2D_generate_cut failed");
// rval = INFINITY_2D_generate_lfree(rays, 6, f, bounds);
// abort_if(rval, "INFINITY_2D_generate_lfree failed");
//
// EXPECT_NEAR(20.0, bounds[0], BOUNDS_EPSILON);
// EXPECT_NEAR(20.0, bounds[1], BOUNDS_EPSILON);