本文整理汇总了C++中Vector_set::next_element方法的典型用法代码示例。如果您正苦于以下问题:C++ Vector_set::next_element方法的具体用法?C++ Vector_set::next_element怎么用?C++ Vector_set::next_element使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Vector_set
的用法示例。
在下文中一共展示了Vector_set::next_element方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: forward_sparse_hessian_pow_op
inline void forward_sparse_hessian_pow_op(
const addr_t* arg ,
Vector_set& for_jac_sparsity ,
Vector_set& for_hes_sparsity )
{ // --------------------------------------------------
// set of independent variables that v0 depends on
for_jac_sparsity.begin(arg[0]);
// loop over dependent variables with non-zero partial
size_t i_x = for_jac_sparsity.next_element();
while( i_x < for_jac_sparsity.end() )
{ // N(i_x) = N(i_x) union L(v0)
for_hes_sparsity.binary_union(i_x, i_x, arg[0], for_jac_sparsity);
// N(i_x) = N(i_x) union L(v1)
for_hes_sparsity.binary_union(i_x, i_x, arg[1], for_jac_sparsity);
i_x = for_jac_sparsity.next_element();
}
// --------------------------------------------------
// set of independent variables that v1 depends on
for_jac_sparsity.begin(arg[1]);
// loop over dependent variables with non-zero partial
i_x = for_jac_sparsity.next_element();
while( i_x < for_jac_sparsity.end() )
{ // N(i_x) = N(i_x) union L(v0)
for_hes_sparsity.binary_union(i_x, i_x, arg[0], for_jac_sparsity);
// N(i_x) = N(i_x) union L(v1)
for_hes_sparsity.binary_union(i_x, i_x, arg[1], for_jac_sparsity);
i_x = for_jac_sparsity.next_element();
}
return;
}
示例2: ForJacSweep
//.........这里部分代码省略.........
CPPAD_ASSERT_UNKNOWN( user_index == size_t(arg[0]) );
CPPAD_ASSERT_UNKNOWN( user_id == size_t(arg[1]) );
CPPAD_ASSERT_UNKNOWN( user_n == size_t(arg[2]) );
CPPAD_ASSERT_UNKNOWN( user_m == size_t(arg[3]) );
user_state = user_start;
}
break;
case UsrapOp:
// parameter argument in an atomic operation sequence
CPPAD_ASSERT_UNKNOWN( user_state == user_arg );
CPPAD_ASSERT_UNKNOWN( user_j < user_n );
CPPAD_ASSERT_UNKNOWN( size_t(arg[0]) < num_par );
// parameters have an empty sparsity pattern
user_r[user_j].clear();
++user_j;
if( user_j == user_n )
{ // call users function for this operation
user_atomic<Base>::for_jac_sparse(user_index, user_id,
user_n, user_m, user_q, user_r, user_s
);
user_state = user_ret;
}
break;
case UsravOp:
// variable argument in an atomic operation sequence
CPPAD_ASSERT_UNKNOWN( user_state == user_arg );
CPPAD_ASSERT_UNKNOWN( user_j < user_n );
CPPAD_ASSERT_UNKNOWN( size_t(arg[0]) <= i_var );
// set user_r[user_j] to sparsity pattern for variable arg[0]
user_r[user_j].clear();
var_sparsity.begin(arg[0]);
i = var_sparsity.next_element();
while( i < user_q )
{ user_r[user_j].insert(i);
i = var_sparsity.next_element();
}
++user_j;
if( user_j == user_n )
{ // call users function for this operation
user_atomic<Base>::for_jac_sparse(user_index, user_id,
user_n, user_m, user_q, user_r, user_s
);
user_state = user_ret;
}
break;
case UsrrpOp:
// parameter result in an atomic operation sequence
CPPAD_ASSERT_UNKNOWN( user_state == user_ret );
CPPAD_ASSERT_UNKNOWN( user_i < user_m );
user_i++;
if( user_i == user_m )
user_state = user_end;
break;
case UsrrvOp:
// variable result in an atomic operation sequence
CPPAD_ASSERT_UNKNOWN( user_state == user_ret );
CPPAD_ASSERT_UNKNOWN( user_i < user_m );
// It might be faster if we add set union to var_sparsity
// where one of the sets is not in var_sparsity
set_itr = user_s[user_i].begin();
set_end = user_s[user_i].end();
while( set_itr != set_end )
示例3: RevHesSweep
//.........这里部分代码省略.........
set_itr = set_v[i].begin();
set_end = set_v[i].end();
while( set_itr != set_end )
rev_hes_sparse.add_element(i_x, *set_itr++);
}
}
}
break;
case UsrapOp:
// parameter argument in an atomic operation sequence
CPPAD_ASSERT_UNKNOWN( user_state == user_arg );
CPPAD_ASSERT_UNKNOWN( 0 < user_j && user_j <= user_n );
CPPAD_ASSERT_UNKNOWN( NumArg(op) == 1 );
CPPAD_ASSERT_UNKNOWN( size_t(arg[0]) < num_par );
--user_j;
user_ix[user_j] = 0;
user_vx[user_j] = false;
if( user_j == 0 )
user_state = user_start;
break;
case UsravOp:
// variable argument in an atomic operation sequence
CPPAD_ASSERT_UNKNOWN( user_state == user_arg );
CPPAD_ASSERT_UNKNOWN( 0 < user_j && user_j <= user_n );
CPPAD_ASSERT_UNKNOWN( NumArg(op) == 1 );
CPPAD_ASSERT_UNKNOWN( size_t(arg[0]) <= i_var );
CPPAD_ASSERT_UNKNOWN( 0 < arg[0] );
--user_j;
user_ix[user_j] = arg[0];
user_vx[user_j] = true;
for_jac_sparse.begin(arg[0]);
i = for_jac_sparse.next_element();
while( i < user_q )
{ if( user_pack )
pack_r[ user_j * user_q + i ] = true;
if( user_bool )
bool_r[ user_j * user_q + i ] = true;
if( user_set )
set_r[user_j].insert(i);
i = for_jac_sparse.next_element();
}
if( user_j == 0 )
user_state = user_start;
break;
case UsrrpOp:
// parameter result in an atomic operation sequence
CPPAD_ASSERT_UNKNOWN( user_state == user_ret );
CPPAD_ASSERT_UNKNOWN( 0 < user_i && user_i <= user_m );
CPPAD_ASSERT_UNKNOWN( NumArg(op) == 1 );
CPPAD_ASSERT_UNKNOWN( size_t(arg[0]) < num_par );
--user_i;
if( user_i == 0 )
user_state = user_arg;
break;
case UsrrvOp:
// variable result in an atomic operation sequence
CPPAD_ASSERT_UNKNOWN( user_state == user_ret );
CPPAD_ASSERT_UNKNOWN( 0 < user_i && user_i <= user_m );
--user_i;
if( RevJac[i_var] )
{
user_s[user_i] = true;
示例4: ForHesSweep
//.........这里部分代码省略.........
}
break;
case UsrapOp:
// parameter argument in an atomic operation sequence
CPPAD_ASSERT_UNKNOWN( user_state == user_arg );
CPPAD_ASSERT_UNKNOWN( user_j < user_n );
CPPAD_ASSERT_UNKNOWN( NumArg(op) == 1 );
CPPAD_ASSERT_UNKNOWN( size_t(arg[0]) < num_par );
user_ix[user_j] = 0;
user_vx[user_j] = false;
//
// parameters as integers
user_x[user_j] = parameter[arg[0]];
//
++user_j;
if( user_j == user_n )
user_state = user_ret;
break;
case UsravOp:
// variable argument in an atomic operation sequence
CPPAD_ASSERT_UNKNOWN( user_state == user_arg );
CPPAD_ASSERT_UNKNOWN( user_j < user_n );
CPPAD_ASSERT_UNKNOWN( NumArg(op) == 1 );
CPPAD_ASSERT_UNKNOWN( size_t(arg[0]) <= i_var );
CPPAD_ASSERT_UNKNOWN( 0 < arg[0] );
user_ix[user_j] = arg[0];
user_vx[user_j] = true;
// variables as integers
user_x[user_j] = CppAD::numeric_limits<Base>::quiet_NaN();
//
for_jac_sparse.begin(arg[0]);
i = for_jac_sparse.next_element();
if( i < for_jac_sparse.end() )
user_r[user_j] = true;
++user_j;
if( user_j == user_n )
user_state = user_ret;
break;
case UsrrpOp:
// parameter result in an atomic operation sequence
CPPAD_ASSERT_UNKNOWN( user_state == user_ret );
CPPAD_ASSERT_UNKNOWN( user_i < user_m );
CPPAD_ASSERT_UNKNOWN( NumArg(op) == 1 );
CPPAD_ASSERT_UNKNOWN( size_t(arg[0]) < num_par );
++user_i;
if( user_i == user_m )
user_state = user_end;
break;
case UsrrvOp:
// variable result in an atomic operation sequence
CPPAD_ASSERT_UNKNOWN( user_state == user_ret );
CPPAD_ASSERT_UNKNOWN( user_i < user_m );
if( rev_jac_sparse.is_element(i_var, 0) )
user_s[user_i] = true;
++user_i;
if( user_i == user_m )
user_state = user_end;
break;
// -------------------------------------------------
case ZmulvvOp:
CPPAD_ASSERT_NARG_NRES(op, 2, 1)
示例5: RevJacSweep
//.........这里部分代码省略.........
// where one of the sets is not in var_sparsity.
if( user_bool )
{ for(j = 0; j < user_q; j++)
if( bool_s[ user_j * user_q + j ] )
var_sparsity.add_element(arg[0], j);
}
else
{ set_itr = set_s[user_j].begin();
set_end = set_s[user_j].end();
while( set_itr != set_end )
var_sparsity.add_element(arg[0], *set_itr++);
}
if( user_j == 0 )
user_state = user_start;
break;
case UsrrpOp:
// parameter result in an atomic operation sequence
CPPAD_ASSERT_UNKNOWN( user_state == user_ret );
CPPAD_ASSERT_UNKNOWN( 0 < user_i && user_i <= user_m );
CPPAD_ASSERT_UNKNOWN( NumArg(op) == 1 );
CPPAD_ASSERT_UNKNOWN( size_t(arg[0]) < num_par );
--user_i;
if( user_i == 0 )
{ // call users function for this operation
user_atom->set_id(user_id);
if( user_bool)
CPPAD_ATOMIC_CALL(
user_q, bool_r, bool_s
);
else
CPPAD_ATOMIC_CALL(
user_q, set_r, set_s
);
user_state = user_arg;
}
break;
case UsrrvOp:
// variable result in an atomic operation sequence
CPPAD_ASSERT_UNKNOWN( user_state == user_ret );
CPPAD_ASSERT_UNKNOWN( 0 < user_i && user_i <= user_m );
--user_i;
var_sparsity.begin(i_var);
i = var_sparsity.next_element();
while( i < user_q )
{ if( user_bool )
bool_r[ user_i * user_q + i ] = true;
else
set_r[user_i].insert(i);
i = var_sparsity.next_element();
}
if( user_i == 0 )
{ // call users function for this operation
user_atom->set_id(user_id);
if( user_bool)
CPPAD_ATOMIC_CALL(
user_q, bool_r, bool_s
);
else
CPPAD_ATOMIC_CALL(
user_q, set_r, set_s
);
user_state = user_arg;
}
break;
// -------------------------------------------------
default:
CPPAD_ASSERT_UNKNOWN(0);
}
# if CPPAD_REV_JAC_SWEEP_TRACE
for(j = 0; j < limit; j++)
z_value[j] = false;
var_sparsity.begin(i_var);
j = var_sparsity.next_element();
while( j < limit )
{ z_value[j] = true;
j = var_sparsity.next_element();
}
printOp(
std::cout,
play,
i_op,
i_var,
op,
arg
);
if( NumRes(op) > 0 && op != BeginOp ) printOpResult(
std::cout,
0,
(CppAD::vectorBool *) CPPAD_NULL,
1,
&z_value
);
std::cout << std::endl;
}
std::cout << std::endl;
# else
}
示例6: RevHesSweep
//.........这里部分代码省略.........
arg,
num_vecad_ind,
vecad_ind,
rev_hes_sparse,
vecad_sparse,
RevJac,
vecad_jac
);
break;
// -------------------------------------------------
case StvpOp:
// sparsity cannot propagate through a parameter
CPPAD_ASSERT_NARG_NRES(op, 3, 0)
break;
// -------------------------------------------------
case StvvOp:
reverse_sparse_hessian_store_op(
op,
arg,
num_vecad_ind,
vecad_ind,
rev_hes_sparse,
vecad_sparse,
RevJac,
vecad_jac
);
break;
// -------------------------------------------------
case SubvvOp:
CPPAD_ASSERT_NARG_NRES(op, 2, 1)
reverse_sparse_hessian_addsub_op(
i_var, arg, RevJac, for_jac_sparse, rev_hes_sparse
);
break;
// -------------------------------------------------
case SubpvOp:
CPPAD_ASSERT_NARG_NRES(op, 2, 1)
reverse_sparse_hessian_linear_unary_op(
i_var, arg[1], RevJac, for_jac_sparse, rev_hes_sparse
);
break;
// -------------------------------------------------
case SubvpOp:
CPPAD_ASSERT_NARG_NRES(op, 2, 1)
reverse_sparse_hessian_linear_unary_op(
i_var, arg[0], RevJac, for_jac_sparse, rev_hes_sparse
);
break;
// -------------------------------------------------
default:
CPPAD_ASSERT_UNKNOWN(0);
}
# if CPPAD_REV_HES_SWEEP_TRACE
for(j = 0; j < limit; j++)
{ zf_value[j] = false;
zh_value[j] = false;
}
for_jac_sparse.begin(i_var);;
j = for_jac_sparse.next_element();;
while( j < limit )
{ zf_value[j] = true;
j = for_jac_sparse.next_element();
}
rev_hes_sparse.begin(i_var);;
j = rev_hes_sparse.next_element();;
while( j < limit )
{ zh_value[j] = true;
j = rev_hes_sparse.next_element();
}
// should also print RevJac[i_var], but printOp does not
// yet allow for this.
printOp(
std::cout,
play,
i_var,
op,
arg,
1,
&zf_value,
1,
&zh_value
);
# endif
}
// values corresponding to BeginOp
CPPAD_ASSERT_UNKNOWN( i_op == 0 );
CPPAD_ASSERT_UNKNOWN( i_var == 0 );
if( vecad_jac != CPPAD_NULL )
CPPAD_TRACK_DEL_VEC(vecad_jac);
if( vecad_ind != CPPAD_NULL )
CPPAD_TRACK_DEL_VEC(vecad_ind);
return;
}