pub struct UnifiedGraph { /* private fields */ }Expand description
统一图结构:同时支持结构梯度和参数梯度
§核心优势
- 统一存储: 结构参数和权重参数存储在同一个图中
- 联合优化: 一步同时更新结构和参数
- 桶式邻接表: O(1) 边编辑,支持动态剪枝
- Generation 索引: 删除边后索引可安全重用
Implementations§
Source§impl UnifiedGraph
impl UnifiedGraph
Sourcepub fn new(config: UnifiedConfig) -> Self
pub fn new(config: UnifiedConfig) -> Self
创建新的统一图
Sourcepub fn from_graph(
base_graph: Graph<NodeData, EdgeData>,
config: UnifiedConfig,
) -> Self
pub fn from_graph( base_graph: Graph<NodeData, EdgeData>, config: UnifiedConfig, ) -> Self
从现有 Graph 构建统一图
Sourcepub fn add_node(&mut self, features: DenseTensor) -> GraphResult<NodeIndex>
pub fn add_node(&mut self, features: DenseTensor) -> GraphResult<NodeIndex>
添加节点
Sourcepub fn add_edge(
&mut self,
src: NodeIndex,
dst: NodeIndex,
weight: DenseTensor,
init_prob: f64,
) -> GraphResult<usize>
pub fn add_edge( &mut self, src: NodeIndex, dst: NodeIndex, weight: DenseTensor, init_prob: f64, ) -> GraphResult<usize>
添加边(同时包含权重和结构参数)
Sourcepub fn get_edge_data(&self, edge_idx: usize) -> Result<&EdgeData, GraphError>
pub fn get_edge_data(&self, edge_idx: usize) -> Result<&EdgeData, GraphError>
Sourcepub fn get_edge_data_mut(
&mut self,
edge_idx: usize,
) -> Result<&mut EdgeData, GraphError>
pub fn get_edge_data_mut( &mut self, edge_idx: usize, ) -> Result<&mut EdgeData, GraphError>
Sourcepub fn forward(&mut self, input: &DenseTensor) -> GraphResult<DenseTensor>
pub fn forward(&mut self, input: &DenseTensor) -> GraphResult<DenseTensor>
前向传播
通过图结构计算输出
Sourcepub fn compute_loss(
&mut self,
target: &DenseTensor,
output: &DenseTensor,
) -> DenseTensor
pub fn compute_loss( &mut self, target: &DenseTensor, output: &DenseTensor, ) -> DenseTensor
计算损失(简单的 MSE 损失示例)
Sourcepub fn backward(&mut self, _loss: &DenseTensor) -> GraphResult<()>
pub fn backward(&mut self, _loss: &DenseTensor) -> GraphResult<()>
反向传播(简化版本)
Sourcepub fn compute_structure_gradients(
&mut self,
_loss: &DenseTensor,
) -> GraphResult<HashMap<(usize, usize), f64>>
pub fn compute_structure_gradients( &mut self, _loss: &DenseTensor, ) -> GraphResult<HashMap<(usize, usize), f64>>
计算结构梯度(基于边存在概率的梯度)
Sourcepub fn joint_optimization_step(&mut self, loss: &DenseTensor) -> GraphResult<()>
pub fn joint_optimization_step(&mut self, loss: &DenseTensor) -> GraphResult<()>
Sourcepub fn prune_weak_edges(&mut self) -> GraphResult<usize>
pub fn prune_weak_edges(&mut self) -> GraphResult<usize>
剪枝弱边
利用桶式邻接表的 O(1) 删除优势
Sourcepub fn discretize(&mut self) -> GraphResult<()>
pub fn discretize(&mut self) -> GraphResult<()>
离散化整个图
Sourcepub fn config(&self) -> &UnifiedConfig
pub fn config(&self) -> &UnifiedConfig
获取配置
Sourcepub fn edge_count(&self) -> usize
pub fn edge_count(&self) -> usize
获取边数
Sourcepub fn node_count(&self) -> usize
pub fn node_count(&self) -> usize
获取节点数
Sourcepub fn num_pruned_edges(&self) -> usize
pub fn num_pruned_edges(&self) -> usize
获取剪枝的边数
Auto Trait Implementations§
impl Freeze for UnifiedGraph
impl RefUnwindSafe for UnifiedGraph
impl Send for UnifiedGraph
impl Sync for UnifiedGraph
impl Unpin for UnifiedGraph
impl UnsafeUnpin for UnifiedGraph
impl UnwindSafe for UnifiedGraph
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
Causes
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
Causes
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
Causes
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
Causes
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
Causes
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
Causes
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
Causes
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
Causes
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Pipes by value. This is generally the method you want to use. Read more
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
Borrows
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
Mutably borrows
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
Borrows
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
Mutably borrows
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
Borrows
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Immutable access to the
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
Mutable access to the
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
Immutable access to the
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
Mutable access to the
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Immutable access to the
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Mutable access to the
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
Calls
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
Calls
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
Calls
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
Calls
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
Calls
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
Calls
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
Calls
.tap_deref() only in debug builds, and is erased in release
builds.