LapjvCSharp 1.0.2
dotnet add package LapjvCSharp --version 1.0.2
NuGet\Install-Package LapjvCSharp -Version 1.0.2
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="LapjvCSharp" Version="1.0.2" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add LapjvCSharp --version 1.0.2
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: LapjvCSharp, 1.0.2"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install LapjvCSharp as a Cake Addin #addin nuget:?package=LapjvCSharp&version=1.0.2 // Install LapjvCSharp as a Cake Tool #tool nuget:?package=LapjvCSharp&version=1.0.2
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
lap: Linear Assignment Problem solver
Original package https://github.com/gatagat/lap, made for Python and translated to C# by RainBowDash.
Params
cost - type double[,]
extendCost - type bool
default : false
costLimit - type double
default : double.PositiveInfinity
Use
It can be used as an instance or as dependency injection.
private static void Main(string[] args)
{
LapjvCSharp.Lapjv lap = new LapjvCSharp.Lapjv();
var Matriz8x8 = new double[,]
{
{1000, 2, 11, 10, 8, 7, 6, 5},
{ 6, 1000, 1, 8, 8, 4, 6, 7},
{ 5, 12, 1000, 11, 8, 12, 3, 11},
{ 11, 9, 10, 1000, 1, 9, 8, 10},
{ 11, 11, 9, 4, 1000, 2, 10, 9},
{ 12, 8, 5, 2, 11, 1000, 11, 9},
{ 10, 11, 12, 10, 9, 12, 1000, 3},
{ 10, 10, 10, 10, 6, 3, 1, 1000}
};
var result = lap.lapjvCsharp(Matriz8x8, true, 4.99);
}
If a cost_limit is not required for your calculation, use:
private static void Main(string[] args)
{
LapjvCSharp.Lapjv lap = new LapjvCSharp.Lapjv();
var Matriz8x8 = new double[,]
{
{1000, 2, 11, 10, 8, 7, 6, 5},
{ 6, 1000, 1, 8, 8, 4, 6, 7},
{ 5, 12, 1000, 11, 8, 12, 3, 11},
{ 11, 9, 10, 1000, 1, 9, 8, 10},
{ 11, 11, 9, 4, 1000, 2, 10, 9},
{ 12, 8, 5, 2, 11, 1000, 11, 9},
{ 10, 11, 12, 10, 9, 12, 1000, 3},
{ 10, 10, 10, 10, 6, 3, 1, 1000}
};
var result = lap.lapjvCsharp(Matriz8x8);
}
Benchmark Performance
The following benchmarks compare the performance of methods using float
and double
for solving matrices of varying sizes.
System Specifications:
- Processor: Intel Core i7-8700 CPU @ 3.20GHz (Coffee Lake)
- Cores: 6 physical, 12 logical
- OS: Windows 10 (22H2/2022 Update)
- .NET Version: .NET 8.0.7
- Benchmark Framework: BenchmarkDotNet v0.14.0
Benchmark Results:
Method | Matrix Size | Mean (ns) | Error (ns) | StdDev (ns) |
---|---|---|---|---|
SolveWithDouble | 100 | 25.53 | 0.540 | 1.548 |
SolveWithFloat | 100 | 24.11 | 0.306 | 0.287 |
SolveWithDouble | 500 | 23.46 | 0.469 | 0.502 |
SolveWithFloat | 500 | 23.54 | 0.405 | 0.379 |
SolveWithDouble | 1000 | 24.41 | 0.236 | 0.209 |
SolveWithFloat | 1000 | 22.89 | 0.164 | 0.128 |
SolveWithDouble | 2000 | 22.92 | 0.322 | 0.302 |
SolveWithFloat | 2000 | 23.17 | 0.165 | 0.146 |
Changelog
- Version 1.0.0: Initial release of the project.
- Version 1.0.1: Bugfix by
jmurphyct
to handle 1x2 matrices correctly. - Version 1.0.2: Added support for matrices using
float
instead ofdouble
. Methods fordouble
were duplicated to avoid potential performance issues due to type transformations.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.