%!TEX root = ../COSCFair.tex
\section{Related Work} \label{sec:related}

In this section, we discuss various fairness metrics defined in the literature and the mitigation algorithms proposed. We start by discussing the different fairness metrics.

\subsection{Fairness Metrics}
There are various fairness metrics in the literature that are developed to quantify the fairness/unfairness in a dataset or the outcomes of a system. They can be used to measure the fairness in different stages of the machine learning pipeline.
% There are two fundamental viewpoints or approaches to the notion of fairness due to its nature, which are axiomatically defined as "What You See Is What You Get (WYSIWYG)" and "We Are All Equal (WAE)"  \cite{friedler2016possibility}.
% \citeauthor{friedler2016possibility} \cite{friedler2016possibility} formalized fairness as the mapping from "construct space" (the space that captures the whole population's meaningful attributes) to "observed space" (the space that can capture only some observable parts of the construct-space), and then to the "decision space" (the space of outcomes that are predicted). According to WYSIWYG, the collected dataset should reflect the original distribution and the characteristics of the population, while the WAE says that all groups are essentially the same.  The metrics regarding demographic parity-related metrics reflect the WAE view, whereas the equality of odds-related metrics reflect WYSIWYG. The other metrics do not have a certain choice of worldview but they are located in between these two ideas.

\stitle{Statistical fairness metrics:} the first category of fairness metrics is called \emph{statistical fairness metrics} or \emph{associational fairness} metrics \cite{salimi2019interventional}.  The main idea behind the statistical fairness metrics is that there must be some parity with a small amount of difference in the measurements between the different groups \cite{chouldechova2018frontiers}. These statistical metrics are always applied to groups of people identified in the dataset so they are called group-based metrics. A set of these metrics consider only the predicted outcome while other metrics consider both predicted and actual outcomes, or predicted probabilities and actual outcomes \cite{verma2018fairness_explained}.

An example of statistical fairness metrics is the \emph{demographic parity}, which states that a classification algorithm is fair if the different groups according to a sensitive attribute have the same probability to be assigned to the positive outcome \cite{dwork2012fairness,kamishima2011fairness}. It means that the sensitive attribute and the outcome should be statistically independent of each other. The \emph{conditional statistical parity} considers a small additional set of "legitimate" attributes while checking the parity in the outcome \cite{corbett2017algorithmic}. In other words, the sensitive attribute(s) should be independent of the outcome given (a set of) legitimate attributes.

A metric emanated from a legal rule \cite{US_guideline} and formulated in \cite{feldman2015certifying} is called \emph{disparate impact}. A dataset is said to have a disparate impact if the ratio of the probability of getting a positive outcome given the unprivileged group to the probability of getting a positive outcome given the privileged group is smaller than $0.8$. This metric is applied to the actual outcomes or predicted outcomes separately.

The \emph{Predictive parity} metric considers the actual outcomes (original class labels) and compare them to the predicted outcomes to quantify fairness \cite{verma2018fairness_explained}. A classifier is considered fair if both unprivileged and privileged groups have the same Positive Predictive Value (PPV). \emph{Equalized odds} is similar to predictive parity, which deems a classifier fair when the true positive rates and the false positive rates for both unprivileged and privileged groups are equal \cite{zafar2017fairness}. A relaxed version of equalized odds is the \emph{equal opportunity} \cite{hardt2016equal_odds_opport}, which only considers one part of the definition of equalized odds. A classifier is fair by equal opportunity if it yields an equal true positive rate for both unprivileged and privileged groups.

More statistical fairness metrics can also be found in the literature such as the \emph{overall accuracy equality} \cite{berk2018fairness}, which considers that true negative outcomes are as desirable as true positive outcomes \cite{berk2018fairness}. Another metric defined in \cite{berk2018fairness} is \emph{treatment equality}, which requires a classifier to produce equal false negative and false positive ratios. The treatment term is used to convey that these ratios can be a policy lever to achieve different kinds of fairness depending on the domain \cite{berk2018fairness}.

% The last type of statistical fairness metrics is based on both predicted probability scores calculated by a classifier and actual outcomes, or original labels, of a dataset. \emph{Test fairness}, or also named as calibration, is one of these metrics that requires a classifier to produce equal prediction probabilities for both protected and unprotected groups to truly belong to the positive class to be deemed as well-calibrated \cite{chouldechova2017fair}. Well-calibrated means that a classifier does not contain any predictive bias. It is a widely used metric as a standard for fairness assessment in the literature \cite{chouldechova2017fair}. Another metric in this called \emph{well-calibration}, which is an expanded version of the calibration metric. According to this metric, next to the equality conditions in calibration, the predicted probability value should also be equal to some value \emph{P}. This metric means that if a classifier finds that a set of samples in a dataset have a certain probability value \emph{p} of being assigned to the positive class, then also \emph{p} percentage of these samples (people) should originally have a positive class label.

% The third fairness metric in this type is called \emph{the balance for positive class}, which deems a classifier fair if samples with the positive class label from both protected and unprotected groups have an equal predicted probability score \cite{kleinberg2017inherent}. \citeauthor{kleinberg2017inherent} have also formalized another fairness metric called \emph{the balance fore negative class} which is the opposite version of the previous fairness metric. This time, a classifier should provide an equal predicted probability score for the samples from both protected and unprotected groups constituting the negative class in a dataset. Thus, to satisfy the "balance for negative class" metric, people with negative class labels should have the same expected probability score, no matter what their sensitive attribute value is. It is important to note that these statistical metrics that require predicted probability scores can only be used with a limited number of classifiers that can calculate such scores, such as logistic regression or support vector machines.

% There are several more metrics defined in the literature, however, most of them have different names for the same metric formalization, as shown above with some examples. At the first glance, statistical fairness metrics seem very attractive due to their easy-to-understand nature.

It should be noted that statistical fairness metrics cannot guarantee fairness for individuals or more fine-grained sub-groups of the unprivileged  groups \cite{chouldechova2018frontiers}. Furthermore, there is a disagreement among different statistical fairness metrics since their goals and the considered criteria are different, which is formalized and proven with the \emph{impossibility theorem} \cite{chouldechova2017fair,kleinberg2017inherent,pleiss2017calibration}. According to this theorem, it is impossible to satisfy both \emph{equalized odds} and  \emph{predictive parity} or calibration for a classifier simultaneously if the base rates of groups are different.
% Only one of them can be satisfied at a time, unless the dataset has the same base rate for both protected and unprotected groups, which means that both groups have precisely the same number of samples with the positive class label, or unless the classifier in question is a perfect classifier which never makes any errors. Only in these two specific and rare cases, these three fairness metrics can be satisfied simultaneously. Due to all of these limitations mentioned above, researchers have come up with new fairness metrics that have different points of view. In the next sections, other proposed metrics that tackle these limitations and try to solve in respective papers are further explained.

\stitle{Individual fairness metrics:} This type of metrics consider the outcomes on the individual level. For example, the  \emph{fairness through unawareness} \cite{kusner2017counterfactual} and \emph{individual fairness} \cite{dwork2012fairness} are based on the fact that similar individuals should be treated similarly in classification tasks. Joseph et al. in  \cite{joseph2016fairness_qualified} brought the \emph{contextual multi-armed bandit} problem to the fairness domain to ensure that any individual who has worse qualities than another individual will not be favored by the algorithm. According to~\cite{galhotra2017causal_discr}, an algorithm is considered fair if it provides the same output for two individuals who have different values only in the sensitive attributes.
Individual fairness approaches show promising improvements for the domain of fairness. However, they have a fundamental limitation due to the assumption that the underlying distance metric for the given dataset is known. Furthermore, using a specific distance metric involve making assumptions regarding the relationship between the features and the labels in the dataset.

% \stitle{Sub-group Fairness Metrics}

Both statistical fairness metrics and individual fairness metrics have specific shortcomings that can be addressed by considering fairness metrics on the the sub-group level \cite{mehrabi2019survey}.
The \emph{metric multifairness} has been introduced in \cite{kim2018fairness} to treat the individuals in a given sub-population similarly, which can be considered as combining the individual and group fairness notions.
To address the problem  when a classifier is fair on each group existing in a sensitive attribute but unfair for one or more subgroups in the dataset defined over multiple sensitive attributes, \emph{fairness gerrymandering} was introduced in~\cite{kearns2018preventing}.
Although this approach is very promising since it does not need specific assumptions regarding the data just like the group-based or statistical metrics, one shortcoming of this approach is that it is not certain which function classes are feasible or reasonable to use for each dataset at hand, and there is no clear guidance about which attributes should be included as protected attributes to define the subgroups later \cite{chouldechova2018frontiers}.

% \stitle{Causal reasoning metrics:} investigating the causal relationships between the attributes and the outcome labels leads to the introduction of causal reasoning metrics. These metrics requires additional understanding and knowledge of how the world is structured in the form of a causal model \cite{loftus2018causal}. The required knowledge is substantial to understand how a change in an attribute can cause a change in the system.
% \citeauthor{kusner2017counterfactual} \cite{kusner2017counterfactual} have proposed \emph{counterfactual fairness}, which considers a dataset as counterfactually fair if a decision regarding an individual is identical in the actual world as well as a counterfactual world where that individual belongs to a different demographic sub-population. Another counterfactual fairness metric was introduced by \citeauthor{kilbertus2017avoiding_discr} \cite{kilbertus2017avoiding_discr} that highlights the importance to distinguish the sensitive attributes from their related proxy attributes so that the underlying effects of sensitive attributes on the decision attribute can be revealed.  Causal reasoning metrics assume that sensitive and proxy attributes can be identified and resolved correctly and the appropriate causal graph for a given dataset can be also constructed accurately.

\subsection{Mitigation Algorithms:}
Researchers have been not only working on finding the best metric but also working on finding an appropriate technique to eliminate the discrimination identified in a dataset or a model. Thus, there are several proposed bias mitigation techniques to eliminate or mitigate unfairness considering the accuracy performance.

\stitle{Pre-processing algorithms:} the first category of bias mitigation algorithms is \emph{pre-processing} algorithms, or techniques, where the dataset is altered before training a classifier in order to obtain a fair dataset as an input. \emph{Fairness through unawareness} is an example of this category, which considers a predictor model fair if none of the protected attributes are used in the prediction process \cite{gajane2017formalizing}. A more sophisticated approach to pre-process a dataset is re-sampling the data instances. In \cite{kamiran2010preferential_samp},  the "preferential sampling" approach was proposed, where they sample the data objects with replacement in order to eliminate bias.
Interventional fairness was proposed in~\cite{salimi2019capuchin}, where the training data is "repaired" by inserting or removing tuples to alter the probability distribution in the dataset. In this way, any causal relationship between sensitive attributes and the decision variable is removed.
\emph{Massaging} \cite{kamiran2012data-preproc} changes the actual class labels of some of the instances in the training set to ensure fairness. A ranker algorithm is used to choose the appropriate instances to relabel.
In \cite{feldman2015certifying} the massaging approach is used on attributes (variables) other than the sensitive attribute(s) of a dataset.

Another pre-processing technique uses \emph{reweighing} \cite{calders2009reweighing}, which assigns weights to each instance in the training set. Basically, this approach assigns higher weights to the instances from the unprivileged group with positive outcomes than the instances from the unprivileged group with negative outcome and vice versa.

The \emph{learning fair representations} (LFR) \cite{zemel2013fair_learning} is defined as an optimization problem to find the appropriate intermediate representation that encodes the data as accurate as possible. Information about the sensitive attributes of individuals is concealed.
A similar study to LFR \cite{zemel2013fair_learning} is conducted in \cite{calmon2017optimized_pre}, which also considers unfairness as an optimization problem with a probabilistic framework. However, test data are also transformed probabilistically before they are given to a classifier model as well as the training data.
A fair data oversampling technique called \emph{fair class balancing} \cite{yan2020fair-balance} was proposed to address the class imbalance problem in datasets. This approach does not use any information regarding the sensitive attributes.

\stitle{In-Processing Algorithms:}
these algorithms tune or adjust the classification algorithm in order to make the model output fair. There are several classifiers that are altered for in-processing such as Support Vector Machines (SVM), logistic regression, and random forests. In processing algorithms are mostly limited to the chosen classifier. Kamiran et al.  in \cite{kamiran2010decision-tree} uses decision trees as a classifier that is  adjusted, or \emph{constrained}, to ensure fairness.
Zafar et al.~\cite{zafar2017fairness-cons} implemented an in-processing algorithm based on constraining classifiers, which is formulated as a regularized optimization problem, using logistic regression and SVM algorithms. Kamishima et al.~\cite{kamishima2011fairness} proposed regularized prejudice remover, which can be applied on any probabilistic classifier to mitigate bias. The proposed technique enforces classifiers to make the predictions independent from a sensitive attribute.
Adversarial learning is used as an in-processing technique to ensure fairness.
Zhang et al. \cite{zhang2018adversarial} have proposed a framework with adversarial debiasing to mitigate bias, which can be implemented with gradient-based models for both classification and regression tasks.
Ristanoski~\cite{ristanoski2013discr-aware} proposed an empirical loss-based tuning on SVM, which also considers the imbalance in the number of samples with positive and negative class labels.

\stitle{Post-Processing Algorithms:}
post-processing algorithms change the predicted outcomes of classifiers based on certain rules or constraints to ensure fairness. Thus, the goal is to eliminate the discrimination from the final predictions instead of the input dataset or within the models. Kamiran et al. \cite{kamiran2012ROC} implemented \emph{reject option classification} (ROC) to change the predicted class labels of the instances that are close to the decision boundary.
The ROC algorithm in \cite{kamiran2012ROC} can be considered as a \emph{thresholding} technique since it considers a certain threshold and a critical region to modify the predicted outcomes of classifiers.
Another approach based on thresholding is proposed in \cite{hardt2016equal_odds_opport}, where the equalized odds (EO) is used as the core fairness metric. The predictions of a classifier obtained at the end of the training step are adjusted to ensure the EO fairness.

Finally, Kilbertus et al. \cite{kilbertus2017avoiding_discr} have proposed two post-processing algorithms, namely avoiding proxy discrimination and avoiding unresolved discrimination, to eliminate unfairness on the predictions of a classifier based on causal perspective and two causal definitions.
Unfortunately, most of the post-processing algorithms have a common limitations in practice. For example, the post-processing algorithms which make corrections on the classifier predictions by randomizing them cannot be used in specific domains due to ethical reasons. Furthermore, post-processing algorithms might deliver sub-optimal performance in terms of accuracy compared to the other fairness techniques \cite{woodworth2017post-learning}.

% Thus, post-processing algorithms are not the best options for the practitioners who would like to achieve fairness while obtaining as high accuracy as possible.


\section{Experiments}

% As with other methods, we observe that introducing a silhouette term into the network loss before the model's pose has been somewhat solved can result in unsatisfactory local minima. We overcome this by using a pre-training stage with the following loss terms:

In this section, the WLDO method is compared against competitive baselines. The protocol for evaluation is described first, followed by a quantitative and qualitative evaluation.

\subsection{Evaluation protocol}

Evaluation is based on the StanfordExtra dataset introduced earlier in the chapter, which contains 8,476 images for 120 breeds. These images are divided per-breed into an 80\%/20\% train and test split.

Two primary evaluation metrics are considered. IoU is the intersection-over-union of the projected model silhouette compared to the ground truth annotation and indicates the quality of the reconstructed 3D shape. Percentage of Correct Keypoints (PCK) computes the percentage of joints which are within a normalized distance (based on square root of 2D silhouette area) to the ground truth locations, and evaluates the quality of reconstructed 3D pose. In addition, PCK results are produced for various joint groups (legs, tail, ears, face) in order to compare the reconstruction accuracy for different parts of the dog. Also used for evaluation is a new comparison metric \emph{PCK-MAX}. This protocol is similar to the Percentage of Correct Keypoints (PCK) metric~\cite{yang2013articulated} but incorporates the `invisible' ground-truth points. The standard PCK metric ignores these points, meaning even correct 3D reconstructions will receive no credit. PCK-MAX instead assumes reconstructed 3D points for missing ground-truth data are correct, providing an interesting upper bound.

\subsection{Training procedure}

The WLDO network is trained in two stages. The first omits the silhouette loss which tends to lead the network to unsatisfactory local minima if applied too early. With the silhouette loss turned off, it is satisfactory to use the simple unimodal prior (and without EM) for this preliminary stage since there is no loss to specifically encourage a strong shape alignment. After this, the silhouette loss and mixture prior with $M=10$ clusters are introduced, and expectation maximization updates are applied every 50 epochs. The first stage is trained for 250 epochs and the second stage for 150. The entire training procedure takes approximately 96 hours on a single P100 GPU.

Recall that the training objective for our end-to-end system for predicting SMBLD parameters consistent with a monocular dog input image is given by:

\begin{equation}
    \L{opt}=\L{joints}+\L{sil}+\L{pose}+\L{shape}+\L{mixture}
\end{equation}

Each loss term is weighted with a scalar $\W{}$. The following details the specific weights used for each training stage:

\ss{Stage 1.} $\W{joints}=10.0,\W{pose}=1.0,\W{shape}=1.0,\W{sil}=0.0,\W{mixture}=0.0$. This stage is trained for 250 epochs using the Adam optimizer, with learning rate set to $10^{-4}$.
\ss{Stage 2.} $\W{joints}=10.0,\W{pose}=0.5,\W{shape}=0.0,\W{sil}=100.0,\W{mixture}=0.1$. This stage is trained for 150 epochs and run the described EM update step every $K=50$ epochs. The number of clusters $M=10$ was selected based on a grid search over $M=1,5,10,25$ with IoU scores compared. The Adam optimizer is again applied with learning rate to $10^{-5}$.

To begin, WLDO is compared with various baseline methods. 3D Menagerie (3D-M)~\cite{zuffi2017menagerie} is an approach which fits the 3D SMAL model using per-image energy minimization. Creatures Great and SMAL (CGAS)~\cite{biggs2018creatures} is a three-stage method, which employs a joint predictor on silhouette renderings from synthetic 3D dogs, applies a genetic algorithm to clean predictions, and finally applies the SMAL optimizer to produce the 3D mesh.

At test-time both 3D-M and CGAS rely on manually-provided segementation masks, and 3D-M also relies on hand-clicked keypoints. In order to produce a fair comparison, we produce a set of \emph{predicted} keypoints for StanfordExtra by training the Stacked Hourglass Network~\cite{newell2016stacked} with 8 stacks and 1 block, and \emph{predicted} segmentation masks using DeepLab v3+~\cite{deeplabv3plus}. The Stacked Hourglass Network achieves 71.4\% PCK score, DeepLab v3+ achieves 83.4\% IoU score and the CGAS joint predictor achieves 41.8\% PCK score.

%All methods are trained from scratch and evaluated on our Stanford Dog validation set.

% \input{eccv2020kit/tab_othernetworks}
% \input{tab_othernetworks}

Table~\ref{tab:baselinesfix}, \Cref{fig:comparison_1} and \Cref{fig:comparison_2} show the comparison against competitive methods. For full examination, results for 3D-M and CGAS are additionally provided in the scenario that ground-truth keypoints and/or segmentations are available at test time.

The results show our end-to-end method outperforms the competitors when they are provided with predicted keypoints/segmentations (white rows). The WLDO method therefore achieves a new state-of-the-art on this 3D reconstruction task. In addition, the method is shown to achieve improved average IoU/PCK scores than competitive methods, even when competitors are provided ground truth annotations at test time (grey rows). Also demonstrated is the wider applicability of two contributions of this chapter (scale parameters and improved prior) in the improved performance of the 3D-M method when these are incorporated. Finally, WLDO's test-time speed is significantly faster than competitive methods as no subsequent energy minimization procedure is required.

\input{Chapter5/Tables/tab_baselines_pckfix.tex}

\input{Chapter5/FigTex/fig_comparison_1.tex}
\input{Chapter5/FigTex/fig_comparison_2.tex}

%xxx: Note that CGAS does badly as it can't clean up using video
\subsection{Generalization to unseen dataset}

Table~\ref{tab:animalposefix} shows an experiment to compare how well our model generalizes to a new data domain. We test our model against the 3D-M~\cite{zuffi2017menagerie} method (using predicted keypoints and segmentations as above for fairness) on the recent Animal Pose dataset~\cite{animalpose}. The data preparation process is the same as for StanfordExtra and no fine-tuning was used for either method. Good results are achieved in this unseen domain and still improve over the 3D-M optimizer.

\input{Chapter5/Tables/tab_anipose_fix.tex}
\input{Chapter5/Tables/tab_anipose_abl_fix.tex}

\subsection{Ablation study}

Secondly, an ablation of the individual components of the WLDO method is provided in order to examine the effect of each contribution on the PCK/IoU performance. Three variants are evaluated: (1) \textbf{Ours w/o EM} that omits EM updates, (2) \textbf{Ours w/o MoG} which replaces the mixture shape prior with a unimodal prior, (3)~\textbf{Ours w/o Scale} which removes the scale parameters.

The results in Table~\ref{tab:ablationfix} indicate that each individual component has a positive impact on the overall method performance. In particular, it can be seen that the inclusion of the EM and Mixture of Gaussians prior leads to an improvement in IoU, suggesting that the shape prior refinements steps help the model accurately fit the exact dog shape. Interestingly, adding the Mixture of Gaussians prior but omitting EM steps slightly hinders performance, most likely due to an sub-optimal initialization for the $M$ clusters. However, adding EM updates to the Mixture of Gaussian model improves all metrics except the ear keypoint accuracy. It is observed that the error here is caused by the shape prior learning slightly imprecise shapes for dogs with extremely ``floppy'' ears. Although there is good silhouette coverage for these regions, the fact the SMBLD model has only a single articulation point per ear causes a lack of flexibility that results in occasionally misplaced ear tips for these instances. This could be improved in future work by adding additional model joints to the ear. Finally, the increased model flexibility afforded by the SMBLD scale parameters is shown to improve the IoU/PCK scores.

\subsection{PCK-MAX results}

The final evaluation metric analyses PCK-MAX, a protocol which provides an upper bound on the PCK score by assuming invisible keypoints were successfully recovered.

\input{Chapter5/Tables/tab_baselines_pckmax.tex}
\input{Chapter5/Tables/tab_anipose_pckmax.tex}
\input{Chapter5/Tables/tab_anipose_abl_pckmax.tex}

% \input{eccv2020kit/tab_ablation}

% We are able to use the dataset to examine which dog parts are the most challenging to position.
% \input{eccv2020kit/fig_jointspreads}
% \anote{TODO: PCK tables and errors visualized on 3D dog.}
% \paragraph{Analysis over breeds}
% A significant benefit of our dog dataset is that the supplied breed labels allows for reconstruction performance to be evaluated over particular breeds. \anote{Figure} ranks the breeds by error.
% \input{eccv2020kit/tab_breed}

\subsection{Qualitative evaluation}

Figures \ref{fig:qualresults_se_1}, \ref{fig:qualresults_se_2} and \ref{fig:qualresults_se_3} shows a range of example system outputs when tested on range of StanfordExtra dogs with varying pose and shape and in challenging conditions. Figure \ref{fig:qualresults_ani} shows results on the Animal Pose dataset. Note that only StanfordExtra is used for training.

% \input{fig_comparison}

% \input{fig_qualresults}

% \input{fig_qual_results_animal_pose}
% \section{Failure Cases}

% \footnotetext[4]{PCK results in tables have been updated to match definitions of Yang and Ramanan~\cite{yang2013articulated} normalized by 2D silhouette area. Please see original tables and further details in the appendix.}


%!TEX root=main.tex
\section{应用}
\label{clicknp:sec:application}

下文将详细讨论这些网络功能。

%
\egg{
To handle the large traffic volume in datacenters, it requires the L4LB to support up to 32 million flows in the flow table.
Clearly, such a large flow table cannot fit into the BRAM of FPGA, and has to be stored in onboard DDR memory.
Accessing DDR memory is slow. To improve performance, we further create a 4-way associative flow cache in BRAM with 16K
cache lines. The flow cache is replaced based on the Least Recently Used (LRU) algorithm.
DDR memory access is a fat pipeline stage as shown in Figure \ref{clicknp:fig:unbalance}. We move the DDR access part to a separate element to make the fast path run asynchronously with slow path.}

\egg{
pFabric \cite{alizadeh2013pfabric} is a near-optimal datacenter transport based on priority scheduling and dropping. Packets are scheduled based on its flow size or remaining flow size in a small queue. Our pFabric scheduler implementation (Figure \ref{clicknp:fig:PFabric}) support 4-giga strict priorities, including a PriorityQueue which deques the packet with highest priority and drops overflow packets with lowest priority, a ReorderQueue to find the earliest packet from the flow with highest priority to avoid starvation and keep packet ordering, and a PacketBuffer to receive packets into buffer and schedule or drop packets out of buffer. Since queue size in a perfectly load balanced fabric should be small, we choose shift register priority queue for maximum throughput and clock frequency.

ReorderQueue is another shift register queue ordered by flow hash. On enque command from PacketBuffer, packet metadata with flow hash $f_{new}$ is enqued to entry $i$ where $f_{i-1} < f_{new} \leq f_{i}$. On deque command from PriorityQueue, the entry $i$ with $f_{i} = f_{deque} < f_{i+1}$ is dequed. Packets with a same flow hash are dequed in the same order as they are enqued.

\begin{figure}[h!]
	\centering
	\includegraphics[width=1.0\columnwidth]{image/PFabric}
	\vspace{-0.30in}
	\caption{PFabric Element Graph}
	\vspace{-0.10in}
	\label{clicknp:fig:PFabric}
	%
\end{figure}
}


\section{Summary}

One common pattern we observe is the tradeoff between number of automated assignments and false positives. The more assignments that we want to automate, the more false positives we will get.

The choice of algorithm is ultimately a decision for the user to make: if we want to prioritize saving time, then we should use Gaussian Mixture; conversely, if we want to prioritize minimizing the number of false positives, then we should use K-Means or Minimum Distance.


\section{Introduction}
\label{sec:section1}
It is widely acknowledged that the search for love is a complex social phenomenon, but in today's world, swipe-based dating platforms (SBDPs) seem to only make it trickier.
These platforms, exemplified by Tinder, Bumble, and Hinge, provide a gamified way of browsing through potential romantic partners by swiping through a stack of suggested candidates to indicate likes or dislikes for these, one profile at a time.
In the search and matching literature, settings like these fall under the category of decentralised two-sided matching markets with search frictions \citep{kanoria2021facilitating} and, despite broad differences with traditional dating sites that perform centralised static matching, SBDPs have come to dominate the modern love market, with Tinder alone boasting 75 million monthly active users and 9.6 million paid subscribers as of 2021 \citep{web:tinder_stats}.

From a theoretical standpoint, search within SBDPs involves several complexities induced by platform-specific features, such as swiping caps, asynchronicity, and directed search algorithms.
These impose non-trivial constraints on the way utility-maximising agents strategise their search, but they have been sparsely studied in the economics literature due to the relative novelty of these platforms.
Overall, the prevalent role of SBDPs in shaping modern romantic interactions and their largely understudied nature motivates many different questions.
Nevertheless, exploring these requires a fundamental understanding of how users make decisions in these platforms: to put it simply, \textit{when should a utility-maximising user swipe right?}

This dissertation will explore the above within an SBDP setting, where agents with heterogeneous preferences on both sides of the market search sequentially for multiple romantic partners.
Crucially, I focus on explaining (what I refer to as) the `Fast-Swiping Men' puzzle: that is, the empirical observation that men in SBDPs respond with significantly higher swipe rates and face considerably worse matching outcomes than women. This phenomenon has been both a subject of empirical research \citep{tyson2016first} and a contentious discussion point within mainstream media \citep{web:vice_tindermen, web:wp_miserabletinder}, and yet a significant gap persists within the literature for an exploration of this through a theoretical lens\footnote{Among the surveyed literature, perhaps the only partial examination of this phenomenon is provided by \cite{kanoria2021facilitating}}.
Such analysis would add significant value since the potential causes of this phenomenon (user patience, differential preferences, and strategic dominance) are all systematically endogenous with one another, thus demanding a rigorous model that can isolate these individual effects and trace their propagation across the SBDP market.
Fundamentally, I show how sex imbalances within the platform (which arise due to several exogenous factors) can explain the above disparities and, expanding on this, I outline a possible intervention under which differential swiping caps between sexes can alleviate inefficiencies stemming from asymmetric selectiveness in the market.

This work presents two main contributions to existing literature on the topic.
Firstly, it constitutes one of a handful of attempts to model the market configurations arising within SBDPs, which is unsurprising due to the novelty of these platforms, but important given their current social relevance.
Furthermore, it distinguishes itself from other similar works by directly considering the `Fast-Swiping Men' puzzle as well as the impact of swiping caps both as a constraint in the agent's search problem and a potential market correction mechanism.
Finally, this work provides an interesting case study for the use of computational methods within game theory (a field that has traditionally emphasised pure mathematical analysis), showing how the two approaches can be jointly applied to complicated questions, with computational methods providing quick explorations that can serve as an intuitive stepping stone towards formalising mathematical arguments.

The remainder of the paper is structured as follows. In \autoref{sec:section2}, I outline the theoretical framework for the model developed in this paper, and derive necessary conditions for both the platform steady state and agent best-responses. In \autoref{sec:section3}, I present a refined definition for the stationary equilibrium of the model and perform computational comparative statics on several parameters, with the aim of explaining the `Fast-Swiping Men' phenomenon and a possible market intervention. In \autoref{sec:section4}, I utilise agent-based simulations to analyse the convergence and dynamics of my model, while \autoref{sec:section5} presents concluding remarks and outlines potential avenues for future research.

\subsection{Related Work}
\label{sec:section1.1}
The present work draws inspiration from two key branches of economics literature: that of search and matching theory, which studies the decision-making process of agents who seek, for example, a job, a business partner, or a spouse, and that of mean-field game theory, which models complex dynamic games involving a large number of players.
I discuss each of these in turn, and then contrast this work with the handful of papers that have focused on specifically analysing SBDP markets.

Despite the abundance of papers within the search and matching literature, which has been amply surveyed by \cite{chade2017sorting}, I focus on works that consider the three defining features of SBDP markets: decentralised matching, non-transferable utility, and sequential search with frictions.
A seminal paper at this intersection is that of \cite{burdett1997marriage}, which studies the marriage market for ex-ante heterogeneous agents under uniform random search, extending the work of \cite{becker1973theory} by showing that positive assortative matching can arise in a setting with search frictions.
Several extensions follow from this, considering idiosyncratic preferences \citep{burdett1998two}, noisy attractiveness observations \citep{chade2006matching}, and even convergence onto the set of stable matchings \citep{adachi2003search}.
The framework outlined in this dissertation is perhaps most similar to that of \cite{burdett1998two}, with three major differences between the two.
Firstly, the model developed in this paper extends the above by allowing for multiple partners within an agent's lifetime, a feature which was probably not significant within the labour market context considered by \cite{burdett1998two}, but which is nevertheless quintessential of SBDPs given their role in enabling casual relationships.
Furthermore, I extend the work of \citeauthor{burdett1998two} by allowing for sex-specific mass differences in the platform, as well as exogenous agent arrival flows; a point that was of noted interest for the authors themselves, and which is fundamental when considering the effects of sex imbalances within the platform.
Finally, the model in this dissertation adopts a discrete time framework, departing from \cite{burdett1998two} and most of the recent matching literature.
Although continuous-time models provide sharper analysis and more flexible empirical specifications \citep{burdett1999long}, this modelling choice lends itself naturally to agent-based simulations, which are used to explore equilibria convergence and dynamics in a richer manner.

On the other hand, mean-field game theory focuses on dynamic games with a large number of agents, for which curses of dimensionality arise due to intractable state spaces.
Mean-field models tackle this issue by conditioning gameplay on the invariant state distribution amongst players, rather than tracking and considering the individual state of each opponent \citep{light2022mean}.
This simplifying assumption is cemented by a \textit{consistency check}, such that equilibria arise when rational play conditional on an aggregate state distribution maintains this as a fixed point.
This approach, perhaps first considered by \cite{jovanovic1988anonymous} and \cite{hopenhayn1992entry}, has been successfully applied to settings such as network routing \citep{calderone2017markov}, dynamic auctions with learning \citep{iyer2014mean} and, perhaps most relevantly, online matching platforms \citep{kanoria2021facilitating,immorlica2021designing}.
In this paper, I rely on mean-field assumptions to abstract away from observability considerations: within SBDPs, the market history is unknown to players, therefore concepts such as Perfect Bayesian Equilibrium would require players to maintain and update beliefs over uncountable history spaces, and even beliefs over the beliefs of other players(a complication known as nested beliefs \citep{brandenburger1993hierarchies}).
This yields two central problems: first, that agent best-responses and equilibria become virtually impossible to compute, and, by extension, that the model assumes an unreasonable level of rationality on behalf of agents \citep{iyer2014mean}.
Thus, by conditioning interactions on the stationary platform state only, the model in this paper characterises equilibria that are both insightful and representative of real-life behaviour and dynamics.

Among the few papers specifically considering SBDPs, \cite{kanoria2021facilitating} propose a dynamic two-sided model with vertically-differentiated agents, and show that platforms with unbalanced markets can improve welfare by forcing the short side to `propose' in all interactions.
Furthermore, \cite{immorlica2021designing} focus on the problem of designing a directed search algorithm for SBDPs by endogenising type-contingent meeting rates for agents.
Finally, \cite{arnosti2021managing} study the welfare losses that can arise in congested matching markets, and propose limiting the visibility of agents as a mechanism for overcoming this issue.
All of these papers present theoretical models with similar features, and these have largely influenced my work in several ways.
Despite this, the above papers all model settings with one-to-one matchings only, thus differing fundamentally with my work in terms of the nature of endogeneity for agent departures.
On one hand, this modelling choice makes their work and insights applicable to a wider variety of online matching platforms (such as AirBnb, TaskRabbit, etc.), but it also fails to capture an essential aspect specific to SBDPs that could have significant behavioural implications.
Other than this (and some minor technical differences), the main point of distinction between my work and theirs is mostly one of perspective: whilst the above papers focus mostly on  platform mechanism design (by considering features such as information constraints or directed search algorithms), I instead seek to explain, from first-principles, how empirically-observed phenomena arises in SBDPs.


\hypertarget{classnumpp_1_1vector}{}\section{numpp\+:\+:vector$<$ T, Size, Transposition $>$ Class Template Reference}
\label{classnumpp_1_1vector}\index{numpp\+::vector$<$ T, Size, Transposition $>$@{numpp\+::vector$<$ T, Size, Transposition $>$}}

{\ttfamily \#include $<$structure.\+hpp$>$}

\subsection*{Public Types}
\begin{DoxyCompactItemize}
\item
\mbox{\Hypertarget{classnumpp_1_1vector_a7b2560fd597d173de79e59646758e494}\label{classnumpp_1_1vector_a7b2560fd597d173de79e59646758e494}}
using {\bfseries value\+\_\+type} = T
\item
\mbox{\Hypertarget{classnumpp_1_1vector_aaef4605e241af000e8d48a159972435c}\label{classnumpp_1_1vector_aaef4605e241af000e8d48a159972435c}}
using {\bfseries size\+\_\+type} = std\+::size\+\_\+t
\item
\mbox{\Hypertarget{classnumpp_1_1vector_a916b870a14ac1e76e8eab22b5c86d223}\label{classnumpp_1_1vector_a916b870a14ac1e76e8eab22b5c86d223}}
using {\bfseries difference\+\_\+type} = std\+::ptrdiff\+\_\+t
\item
\mbox{\Hypertarget{classnumpp_1_1vector_aafa7cc182e3024a9313adc6a04d42302}\label{classnumpp_1_1vector_aafa7cc182e3024a9313adc6a04d42302}}
using {\bfseries reference} = typename std\+::array$<$ T, Size $>$\+::reference
\item
\mbox{\Hypertarget{classnumpp_1_1vector_a9c682af3da1dc34cb68c15585b06b19c}\label{classnumpp_1_1vector_a9c682af3da1dc34cb68c15585b06b19c}}
using {\bfseries const\+\_\+reference} = typename std\+::array$<$ T, Size $>$\+::const\+\_\+reference
\item
\mbox{\Hypertarget{classnumpp_1_1vector_acf8e239235faf0d77433f8c7133743b8}\label{classnumpp_1_1vector_acf8e239235faf0d77433f8c7133743b8}}
using {\bfseries pointer} = value\+\_\+type $\ast$
\item
\mbox{\Hypertarget{classnumpp_1_1vector_af533028c9a99dc86174df15ae28f323a}\label{classnumpp_1_1vector_af533028c9a99dc86174df15ae28f323a}}
using {\bfseries const\+\_\+pointer} = const value\+\_\+type $\ast$
\item
\mbox{\Hypertarget{classnumpp_1_1vector_abe494178a87f1be7dfe8078465dc1534}\label{classnumpp_1_1vector_abe494178a87f1be7dfe8078465dc1534}}
using {\bfseries iterator} = typename std\+::array$<$ T, Size $>$\+::iterator
\item
\mbox{\Hypertarget{classnumpp_1_1vector_aeb72fcde951bfd845ba24d9f01ec9d14}\label{classnumpp_1_1vector_aeb72fcde951bfd845ba24d9f01ec9d14}}
using {\bfseries const\+\_\+iterator} = typename std\+::array$<$ T, Size $>$\+::const\+\_\+iterator
\item
\mbox{\Hypertarget{classnumpp_1_1vector_ab3bb945307c72ee6f5e2b45097a2ed6d}\label{classnumpp_1_1vector_ab3bb945307c72ee6f5e2b45097a2ed6d}}
using {\bfseries reverse\+\_\+iterator} = typename std\+::array$<$ T, Size $>$\+::reverse\+\_\+iterator
\item
\mbox{\Hypertarget{classnumpp_1_1vector_a761280bdf7e645f5fe7b7c44cf12fc65}\label{classnumpp_1_1vector_a761280bdf7e645f5fe7b7c44cf12fc65}}
using {\bfseries const\+\_\+reverse\+\_\+iterator} = typename std\+::array$<$ T, Size $>$\+::const\+\_\+reverse\+\_\+iterator
\end{DoxyCompactItemize}
\subsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item
\mbox{\Hypertarget{classnumpp_1_1vector_ad80c07beed6f1f5e24cd5b1b59e71938}\label{classnumpp_1_1vector_ad80c07beed6f1f5e24cd5b1b59e71938}}
constexpr {\bfseries vector} (const \hyperlink{classnumpp_1_1vector}{vector} \&)=default
\item
\mbox{\Hypertarget{classnumpp_1_1vector_aaa6ad1b5e7c8f71ff460c296486419a6}\label{classnumpp_1_1vector_aaa6ad1b5e7c8f71ff460c296486419a6}}
constexpr {\bfseries vector} (\hyperlink{classnumpp_1_1vector}{vector} \&\&)=default
\item
\mbox{\Hypertarget{classnumpp_1_1vector_a2106f202b6dcf228cbd5c9c5eac519d6}\label{classnumpp_1_1vector_a2106f202b6dcf228cbd5c9c5eac519d6}}
constexpr \hyperlink{classnumpp_1_1vector}{vector} \& {\bfseries operator=} (const \hyperlink{classnumpp_1_1vector}{vector} \&)=default
\item
\mbox{\Hypertarget{classnumpp_1_1vector_aea654c76b157b8e826b15ef7da7bccec}\label{classnumpp_1_1vector_aea654c76b157b8e826b15ef7da7bccec}}
constexpr \hyperlink{classnumpp_1_1vector}{vector} \& {\bfseries operator=} (\hyperlink{classnumpp_1_1vector}{vector} \&\&)=default
\item
\mbox{\Hypertarget{classnumpp_1_1vector_aa56375d25f669ed670c3d04b844e8424}\label{classnumpp_1_1vector_aa56375d25f669ed670c3d04b844e8424}}
{\footnotesize template$<$typename... U, typename  = std\+::enable\+\_\+if\+\_\+t$<$						std\+::is\+\_\+same$<$\+T, std\+::common\+\_\+type\+\_\+t$<$\+T, U...$>$$>$\+::value					$>$$>$ }\\constexpr \hyperlink{classnumpp_1_1vector_aa56375d25f669ed670c3d04b844e8424}{vector} (U \&\&... args)
\begin{DoxyCompactList}\small\item\em constructor acting exactly like std\+::initializer\+\_\+list one with type checking \end{DoxyCompactList}\item
constexpr \hyperlink{classnumpp_1_1vector_ac94f1a73274a498f76425a84cf6e395b}{vector} (const \hyperlink{classnumpp_1_1vector}{vector}$<$ T, Size, !Transposition $>$ \&\hyperlink{classnumpp_1_1vector_a81037f5cce7bd02354efe8b967c191bf}{transposed})
\begin{DoxyCompactList}\small\item\em copy constructor for vector with different transposition \end{DoxyCompactList}\item
constexpr \hyperlink{classnumpp_1_1vector_aa1ce55da7e9a2ccf1b1624a9f5347d5e}{vector} (\hyperlink{classnumpp_1_1vector}{vector}$<$ T, Size, !Transposition $>$ \&\&\hyperlink{classnumpp_1_1vector_a81037f5cce7bd02354efe8b967c191bf}{transposed})
\begin{DoxyCompactList}\small\item\em move constructor for vector with different transposition \end{DoxyCompactList}\item
constexpr bool \hyperlink{classnumpp_1_1vector_a81037f5cce7bd02354efe8b967c191bf}{transposed} () const
\item
\mbox{\Hypertarget{classnumpp_1_1vector_a1e85f0d698ea1fe89382b7f6856e2e9c}\label{classnumpp_1_1vector_a1e85f0d698ea1fe89382b7f6856e2e9c}}
constexpr std\+::size\+\_\+t {\bfseries size} () const
\item
\mbox{\Hypertarget{classnumpp_1_1vector_a43212e8baa84331d115e520883329c1e}\label{classnumpp_1_1vector_a43212e8baa84331d115e520883329c1e}}
constexpr std\+::size\+\_\+t {\bfseries max\+\_\+size} () const
\item
\mbox{\Hypertarget{classnumpp_1_1vector_a39ba91feb3daa1156002e4e9b58e8ee9}\label{classnumpp_1_1vector_a39ba91feb3daa1156002e4e9b58e8ee9}}
constexpr bool {\bfseries operator==} (const \hyperlink{classnumpp_1_1vector}{vector} \&x) const
\item
\mbox{\Hypertarget{classnumpp_1_1vector_a79df8fa5b519885aaae962f2464c0fe6}\label{classnumpp_1_1vector_a79df8fa5b519885aaae962f2464c0fe6}}
constexpr bool {\bfseries operator!=} (const \hyperlink{classnumpp_1_1vector}{vector} \&x) const
\item
\mbox{\Hypertarget{classnumpp_1_1vector_ac4a8575eecf2826d5fd3490ca795f007}\label{classnumpp_1_1vector_ac4a8575eecf2826d5fd3490ca795f007}}
constexpr bool {\bfseries operator==} (const \hyperlink{classnumpp_1_1vector}{vector}$<$ T, Size, !Transposition $>$ \&x) const
\item
\mbox{\Hypertarget{classnumpp_1_1vector_a87f25e771d021a14b885f8b461f4bbff}\label{classnumpp_1_1vector_a87f25e771d021a14b885f8b461f4bbff}}
constexpr bool {\bfseries operator!=} (const \hyperlink{classnumpp_1_1vector}{vector}$<$ T, Size, !Transposition $>$ \&x) const
\item
\mbox{\Hypertarget{classnumpp_1_1vector_a8fe38963af92e47fbc3c60f5206f46a4}\label{classnumpp_1_1vector_a8fe38963af92e47fbc3c60f5206f46a4}}
constexpr reference {\bfseries operator()} (size\+\_\+type pos)
\item
\mbox{\Hypertarget{classnumpp_1_1vector_adccd806cababde7552083fd4e6dc1120}\label{classnumpp_1_1vector_adccd806cababde7552083fd4e6dc1120}}
constexpr const\+\_\+reference {\bfseries operator()} (size\+\_\+type pos) const
\item
\mbox{\Hypertarget{classnumpp_1_1vector_a4a6a323fba82f8d7e00a97e5c680f3ac}\label{classnumpp_1_1vector_a4a6a323fba82f8d7e00a97e5c680f3ac}}
constexpr iterator {\bfseries begin} ()
\item
\mbox{\Hypertarget{classnumpp_1_1vector_abf65526b58940a75270e79e8acb7f9de}\label{classnumpp_1_1vector_abf65526b58940a75270e79e8acb7f9de}}
constexpr const\+\_\+iterator {\bfseries begin} () const
\item
\mbox{\Hypertarget{classnumpp_1_1vector_a7a50f2bcccc47bc2cbbc3a14dd4d85cd}\label{classnumpp_1_1vector_a7a50f2bcccc47bc2cbbc3a14dd4d85cd}}
constexpr const\+\_\+iterator {\bfseries cbegin} () const
\item
\mbox{\Hypertarget{classnumpp_1_1vector_a554526a327c85c0abc597dff4917b220}\label{classnumpp_1_1vector_a554526a327c85c0abc597dff4917b220}}
constexpr iterator {\bfseries end} ()
\item
\mbox{\Hypertarget{classnumpp_1_1vector_a82561fe6ed71bea8de02702a18d3d790}\label{classnumpp_1_1vector_a82561fe6ed71bea8de02702a18d3d790}}
constexpr const\+\_\+iterator {\bfseries end} () const
\item
\mbox{\Hypertarget{classnumpp_1_1vector_ac8aecec72fe89e6b818753a2c44ca696}\label{classnumpp_1_1vector_ac8aecec72fe89e6b818753a2c44ca696}}
constexpr const\+\_\+iterator {\bfseries cend} () const
\item
\mbox{\Hypertarget{classnumpp_1_1vector_a4f7d7c70486774b877e59c072562a257}\label{classnumpp_1_1vector_a4f7d7c70486774b877e59c072562a257}}
constexpr reverse\+\_\+iterator {\bfseries rbegin} ()
\item
\mbox{\Hypertarget{classnumpp_1_1vector_aaf68aef32052dbc490633fc584443e16}\label{classnumpp_1_1vector_aaf68aef32052dbc490633fc584443e16}}
constexpr const\+\_\+reverse\+\_\+iterator {\bfseries rbegin} () const
\item
\mbox{\Hypertarget{classnumpp_1_1vector_addd32fda791bcf70bfd1b59669b56858}\label{classnumpp_1_1vector_addd32fda791bcf70bfd1b59669b56858}}
constexpr const\+\_\+reverse\+\_\+iterator {\bfseries crbegin} () const
\item
\mbox{\Hypertarget{classnumpp_1_1vector_ad25f7bea977b38be2df1a333063e4dac}\label{classnumpp_1_1vector_ad25f7bea977b38be2df1a333063e4dac}}
constexpr reverse\+\_\+iterator {\bfseries rend} ()
\item
\mbox{\Hypertarget{classnumpp_1_1vector_aa077f06cd578ae87860a55b3d1803608}\label{classnumpp_1_1vector_aa077f06cd578ae87860a55b3d1803608}}
constexpr const\+\_\+reverse\+\_\+iterator {\bfseries rend} () const
\item
\mbox{\Hypertarget{classnumpp_1_1vector_a953588920df3adbb93c0056f98a6d5cc}\label{classnumpp_1_1vector_a953588920df3adbb93c0056f98a6d5cc}}
constexpr const\+\_\+reverse\+\_\+iterator {\bfseries crend} () const
\end{DoxyCompactItemize}
\subsection*{Public Attributes}
\begin{DoxyCompactItemize}
\item
\mbox{\Hypertarget{classnumpp_1_1vector_a470ac88412839d0a338761e13103aa38}\label{classnumpp_1_1vector_a470ac88412839d0a338761e13103aa38}}
std\+::array$<$ T, Size $>$ {\bfseries vector\+\_\+}
\end{DoxyCompactItemize}

\subsection{Detailed Description}
\subsubsection*{template$<$typename T, std\+::size\+\_\+t Size, bool Transposition = false$>$\newline
class numpp\+::vector$<$ T, Size, Transposition $>$}

\begin{DoxyTemplParams}{Template Parameters}
{\em T} & arithmetic type contained in vector class \\
\hline
{\em Size} & size of the vector \\
\hline
{\em Transposition} & bool indicating whether the vector is transposed\\
\hline
\end{DoxyTemplParams}

\begin{DoxyCode}
\textcolor{preprocessor}{#include"numpp/structures/vector.hpp"}
\end{DoxyCode}

\subsection{Constructor \& Destructor Documentation}
\mbox{\Hypertarget{classnumpp_1_1vector_ac94f1a73274a498f76425a84cf6e395b}\label{classnumpp_1_1vector_ac94f1a73274a498f76425a84cf6e395b}}
\index{numpp\+::vector@{numpp\+::vector}!vector@{vector}}
\index{vector@{vector}!numpp\+::vector@{numpp\+::vector}}
\subsubsection{\texorpdfstring{vector()}{vector()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily template$<$typename T, std\+::size\+\_\+t Size, bool Transposition = false$>$ \\
constexpr \hyperlink{classnumpp_1_1vector}{numpp\+::vector}$<$ T, Size, Transposition $>$\+::\hyperlink{classnumpp_1_1vector}{vector} (\begin{DoxyParamCaption}\item[{const \hyperlink{classnumpp_1_1vector}{vector}$<$ T, Size, !Transposition $>$ \&}]{transposed }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [explicit]}}

copy constructor for vector with different transposition

Cannot be used in implict casting, you have to cast it explicitly \mbox{\Hypertarget{classnumpp_1_1vector_aa1ce55da7e9a2ccf1b1624a9f5347d5e}\label{classnumpp_1_1vector_aa1ce55da7e9a2ccf1b1624a9f5347d5e}}
\index{numpp\+::vector@{numpp\+::vector}!vector@{vector}}
\index{vector@{vector}!numpp\+::vector@{numpp\+::vector}}
\subsubsection{\texorpdfstring{vector()}{vector()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily template$<$typename T, std\+::size\+\_\+t Size, bool Transposition = false$>$ \\
constexpr \hyperlink{classnumpp_1_1vector}{numpp\+::vector}$<$ T, Size, Transposition $>$\+::\hyperlink{classnumpp_1_1vector}{vector} (\begin{DoxyParamCaption}\item[{\hyperlink{classnumpp_1_1vector}{vector}$<$ T, Size, !Transposition $>$ \&\&}]{transposed }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [explicit]}}

move constructor for vector with different transposition

Cannot be used in implict casting, you have to cast it explicitly

\subsection{Member Function Documentation}
\mbox{\Hypertarget{classnumpp_1_1vector_a81037f5cce7bd02354efe8b967c191bf}\label{classnumpp_1_1vector_a81037f5cce7bd02354efe8b967c191bf}}
\index{numpp\+::vector@{numpp\+::vector}!transposed@{transposed}}
\index{transposed@{transposed}!numpp\+::vector@{numpp\+::vector}}
\subsubsection{\texorpdfstring{transposed()}{transposed()}}
{\footnotesize\ttfamily template$<$typename T, std\+::size\+\_\+t Size, bool Transposition = false$>$ \\
constexpr bool \hyperlink{classnumpp_1_1vector}{numpp\+::vector}$<$ T, Size, Transposition $>$\+::transposed (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}

returns whether the vector is transposed. \begin{DoxyReturn}{Returns}
true for transposed, false otherwise
\end{DoxyReturn}

The documentation for this class was generated from the following file\+:\begin{DoxyCompactItemize}
\item
structures/vector/structure.\+hpp\end{DoxyCompactItemize}