53 std::vector<c_float> P_data;
54 std::vector<c_int> P_indices;
55 std::vector<c_int> P_indptr;
59 std::vector<c_float> A_data;
60 std::vector<c_int> A_indices;
61 std::vector<c_int> A_indptr;
62 std::vector<c_float> lower_bounds;
63 std::vector<c_float> upper_bounds;
68 std::vector<c_float> q;
71 CHECK_EQ(lower_bounds.size(), upper_bounds.size());
74 size_t num_affine_constraint = lower_bounds.size();
77 data->m = num_affine_constraint;
78 data->P = csc_matrix(kernel_dim, kernel_dim, P_data.size(),
CopyData(P_data),
82 csc_matrix(num_affine_constraint, kernel_dim, A_data.size(),
137 std::vector<c_float>* A_data, std::vector<c_int>* A_indices,
138 std::vector<c_int>* A_indptr, std::vector<c_float>* lower_bounds,
139 std::vector<c_float>* upper_bounds) {
144 const int num_of_variables = 3 * n;
145 const int num_of_constraints = num_of_variables + 3 * (n - 1) + 3;
146 lower_bounds->resize(num_of_constraints);
147 upper_bounds->resize(num_of_constraints);
149 std::vector<std::vector<std::pair<c_int, c_float>>> variables(
152 int constraint_index = 0;
154 for (
int i = 0; i < num_of_variables; ++i) {
156 variables[i].emplace_back(constraint_index, 1.0);
157 lower_bounds->at(constraint_index) =
159 upper_bounds->at(constraint_index) =
161 }
else if (i < 2 * n) {
162 variables[i].emplace_back(constraint_index, 1.0);
164 lower_bounds->at(constraint_index) =
166 upper_bounds->at(constraint_index) =
169 variables[i].emplace_back(constraint_index, 1.0);
170 lower_bounds->at(constraint_index) =
172 upper_bounds->at(constraint_index) =
177 CHECK_EQ(constraint_index, num_of_variables);
180 for (
int i = 0; i + 1 < n; ++i) {
181 variables[2 * n + i].emplace_back(constraint_index, -1.0);
182 variables[2 * n + i + 1].emplace_back(constraint_index, 1.0);
183 lower_bounds->at(constraint_index) =
185 upper_bounds->at(constraint_index) =
191 for (
int i = 0; i + 1 < n; ++i) {
192 variables[n + i].emplace_back(constraint_index, -1.0 *
scale_factor_[2]);
193 variables[n + i + 1].emplace_back(constraint_index, 1.0 *
scale_factor_[2]);
194 variables[2 * n + i].emplace_back(constraint_index,
196 variables[2 * n + i + 1].emplace_back(constraint_index,
198 lower_bounds->at(constraint_index) = 0.0;
199 upper_bounds->at(constraint_index) = 0.0;
206 for (
int i = 0; i + 1 < n; ++i) {
207 variables[i].emplace_back(constraint_index,
209 variables[i + 1].emplace_back(constraint_index,
211 variables[n + i].emplace_back(
213 variables[2 * n + i].emplace_back(
216 variables[2 * n + i + 1].emplace_back(
220 lower_bounds->at(constraint_index) = 0.0;
221 upper_bounds->at(constraint_index) = 0.0;
226 variables[0].emplace_back(constraint_index, 1.0);
231 variables[n].emplace_back(constraint_index, 1.0);
236 variables[2 * n].emplace_back(constraint_index, 1.0);
241 CHECK_EQ(constraint_index, num_of_constraints);
244 for (
int i = 0; i < num_of_variables; ++i) {
245 A_indptr->push_back(ind_p);
246 for (
const auto& variable_nz : variables[i]) {
248 A_data->push_back(variable_nz.second);
251 A_indices->push_back(variable_nz.first);
257 A_indptr->push_back(ind_p);