blob: e8381a05a6defaed4c0d03b36614395ffea87139 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
// Copyright (C) 2007, International Business Machines Corporation and others.
// All Rights Reserved.
// This code is published under the Eclipse Public License.
//
// Authors :
// Joao P. Goncalves, International Business Machines Corporation
//
// Date : November 12, 2007
#ifndef BonHeuristicFPump_HPP
#define BonHeuristicFPump_HPP
#include "BonOsiTMINLPInterface.hpp"
#include "BonBonminSetup.hpp"
#include "CbcHeuristic.hpp"
namespace Bonmin
{
class HeuristicFPump : public CbcHeuristic
{
public:
/// Default constructor
HeuristicFPump();
/// Constructor with setup
HeuristicFPump(BonminSetup * setup);
/// Copy constructor
HeuristicFPump(const HeuristicFPump ©);
/// Destructor
~HeuristicFPump() {}
/// Assignment operator
HeuristicFPump & operator=(const HeuristicFPump & rhs);
/** Virtual constructor.*/
virtual CbcHeuristic * clone() const{
return new HeuristicFPump(*this);
}
/// Resets stuff if model changes
virtual void resetModel(CbcModel * model){
setModel(model);
}
/** Change setup used for heuristic.*/
void setSetup(BonminSetup * setup){
setup_ = setup;
Initialize(setup_->options());
}
/// Performs heuristic
virtual int solution(double &solutionValue, double *betterSolution);
/// Performs heuristic with add cust
virtual int solution(double &solutionValue, double *betterSolution, OsiCuts & cs)
{
return solution(solutionValue, betterSolution);
}
/** Register the options for this heuristic */
static void registerOptions(Ipopt::SmartPtr<Bonmin::RegisteredOptions> roptions);
/** Initiaize using passed options.*/
void Initialize(Ipopt::SmartPtr<Ipopt::OptionsList> options);
private:
/** Setup to use for local searches (will make copies).*/
BonminSetup * setup_;
/** Norm of the objective function - either 1 or 2 */
int objective_norm_;
/// To enable advanced unstable stuff
int enableAdvanced_;
};
class RoundingFPump
{
public:
/// Default constructor
RoundingFPump(TMINLP2TNLP* minlp);
/// Destructor
~RoundingFPump();
/// Rounds the solution
void round(const double integerTolerance,
const double primalTolerance,
double* solution);
private:
/// gutsOfConstructor
void gutsOfConstructor();
/// Pointer to problem
TMINLP2TNLP* minlp_;
/// Number of rows
int numberRows_;
/// Number of columns
int numberColumns_;
/// Jacobian of g
std::vector<std::pair<int, int> >* col_and_jac_g_;
};
}
#endif
|