@@ -262,4 +262,74 @@ TEST(dual_simplex, empty_columns)
262262 EXPECT_NEAR (solution.x [8 ], 0 , 1e-6 );
263263}
264264
265+ TEST (dual_simplex, dual_variable_greater_than)
266+ {
267+ // minimize 3*x0 + 2 * x1
268+ // subject to x0 + x1 >= 1
269+ // x0 + 2x1 >= 3
270+ // x0, x1 >= 0
271+
272+ cuopt::linear_programming::dual_simplex::user_problem_t <int , double > user_problem;
273+ constexpr int m = 2 ;
274+ constexpr int n = 2 ;
275+ constexpr int nz = 4 ;
276+
277+ user_problem.num_rows = m;
278+ user_problem.num_cols = n;
279+ user_problem.objective .resize (n);
280+ user_problem.objective [0 ] = 3.0 ;
281+ user_problem.objective [1 ] = 2.0 ;
282+ user_problem.A .m = m;
283+ user_problem.A .n = n;
284+ user_problem.A .nz_max = nz;
285+ user_problem.A .reallocate (nz);
286+ user_problem.A .col_start .resize (n + 1 );
287+ user_problem.A .col_start [0 ] = 0 ; // x0 start
288+ user_problem.A .col_start [1 ] = 2 ;
289+ user_problem.A .col_start [2 ] = 4 ;
290+
291+ int nnz = 0 ;
292+ user_problem.A .i [nnz] = 0 ;
293+ user_problem.A .x [nnz++] = 1.0 ;
294+ user_problem.A .i [nnz] = 1 ;
295+ user_problem.A .x [nnz++] = 1.0 ;
296+ user_problem.A .i [nnz] = 0 ;
297+ user_problem.A .x [nnz++] = 1.0 ;
298+ user_problem.A .i [nnz] = 1 ;
299+ user_problem.A .x [nnz++] = 2.0 ;
300+ user_problem.A .print_matrix ();
301+ EXPECT_EQ (nnz, nz);
302+
303+ user_problem.rhs .resize (m);
304+ user_problem.rhs [0 ] = 1.0 ;
305+ user_problem.rhs [1 ] = 3.0 ;
306+
307+ user_problem.row_sense .resize (m);
308+ user_problem.row_sense [0 ] = ' G' ;
309+ user_problem.row_sense [1 ] = ' G' ;
310+
311+ user_problem.lower .resize (n);
312+ user_problem.lower [0 ] = 0.0 ;
313+ user_problem.lower [1 ] = 0.0 ;
314+
315+ user_problem.upper .resize (n);
316+ user_problem.upper [0 ] = dual_simplex::inf;
317+ user_problem.upper [1 ] = dual_simplex::inf;
318+
319+ user_problem.num_range_rows = 0 ;
320+ user_problem.problem_name = " dual_variable_greater_than" ;
321+
322+ dual_simplex::simplex_solver_settings_t <int , double > settings;
323+ dual_simplex::lp_solution_t <int , double > solution (user_problem.num_rows , user_problem.num_cols );
324+ EXPECT_EQ ((dual_simplex::solve_linear_program (user_problem, settings, solution)),
325+ dual_simplex::lp_status_t ::OPTIMAL );
326+ EXPECT_NEAR (solution.objective , 3.0 , 1e-6 );
327+ EXPECT_NEAR (solution.x [0 ], 0.0 , 1e-6 );
328+ EXPECT_NEAR (solution.x [1 ], 1.5 , 1e-6 );
329+ EXPECT_NEAR (solution.y [0 ], 0.0 , 1e-6 );
330+ EXPECT_NEAR (solution.y [1 ], 1.0 , 1e-6 );
331+ EXPECT_NEAR (solution.z [0 ], 2.0 , 1e-6 );
332+ EXPECT_NEAR (solution.z [1 ], 0.0 , 1e-6 );
333+ }
334+
265335} // namespace cuopt::linear_programming::dual_simplex::test
0 commit comments