def main(argv=None): """main function""" if argv is None: argv = sys.argv prog_path = os.path.dirname(argv[0]) prog_abspath = os.path.abspath(prog_path) input_parser = argparse.ArgumentParser(description=doc_str) input_parser.add_argument('-sN', default=2, type=int, help='sudoku size param. 2 = 4x4 sudoku, 3 = 9x9 sudoku.') input_parser.add_argument('-sfile', help='file specifying the sudoku array.') input_parser.add_argument('-sffmt', default=None, type=int, help='specify the fmt of the sfile') input_parser.add_argument('-debug') try : args = input_parser.parse_args(argv[1:]) except SystemExit : return 1 mysudoku = sudoku(args.sN) mysudoku.init_from_file(args.sfile, args.sffmt) if args.debug : print "Input sudoku" print mysudoku mylpd = lpdict() mysudoku.init_lpdict(mylpd) if args.debug : print "Start lp" print mylpd fz = mylpd.solve_ilp() #assert (fz == mysudoku.NN) mysudoku.lpsoln_to_sudoku_format(mylpd) print mysudoku
def main(argv=None): """main function""" if argv is None: argv = sys.argv prog_path = os.path.dirname(argv[0]) prog_abspath = os.path.abspath(prog_path) input_parser = argparse.ArgumentParser(description=doc_str) input_parser.add_argument('-lpdict', default='part1.lpdict', help='lpdictionary file') input_parser.add_argument('-part' , default=123, type=int, help='1, 2, 3, 123, 4') input_parser.add_argument('-debug') try : args = input_parser.parse_args(argv[1:]) except SystemExit : return 1 mylpd = lpdict() mylpd.init_from_file(args.lpdict) # part 1 : Just do one pivot. if args.part == 1 : ev = mylpd.find_entering_variable() lv = mylpd.find_leaving_variable(ev) if not isinstance(ev, Number) : print ev elif not isinstance(lv, Number) : print lv else : print ev print lv zp = mylpd.pivot(ev, lv) if zp != None : if int(zp) == zp: print "%.1f"%(zp) else : print "%.4f"%(zp) # Part 2 : solve LP where the initial state is feasible. # Part 3 : solve initialization phase simplex. if args.part == 3 : if args.debug : print mylpd # Set up aux problem mylpd.auxiliarize() if args.debug : print mylpd mylpd.first_aux_pivot() if args.part in [2,3]: pivot_count = 0 while True : if args.debug : print mylpd ev = mylpd.find_entering_variable() if args.debug : print ev if not isinstance(ev, Number) : # final print "%.6f"%(mylpd.z_coeffs[0]) if args.part == 2 : print pivot_count break lv = mylpd.find_leaving_variable(ev) if args.debug : print lv if not isinstance(lv, Number) : # unbounded print lv break mylpd.pivot(ev,lv) pivot_count += 1 # Part 123 (my own) : Put parts 1,2,3, together and clean up everything to create a full solver. if args.part == 123: # Full solver. final_z = mylpd.solve_lp() if not isinstance(final_z, Number) : print "Unable to solve." print final_z else : print "SOLVED!!!" print final_z print mylpd.variable_values() return if args.part == 4: # Full ILP solver. final_z = mylpd.solve_ilp() if not isinstance(final_z, Number) : print final_z else : print "%.1f"%(final_z)