Skip to content

Commit

Permalink
macros syntax
Browse files Browse the repository at this point in the history
  • Loading branch information
montyvesselinov committed May 6, 2024
1 parent f9f991d commit d7bb230
Show file tree
Hide file tree
Showing 13 changed files with 109 additions and 109 deletions.
2 changes: 1 addition & 1 deletion src/NMFkCluster.jl
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ function robustkmeans(X::AbstractMatrix, k::Integer, repeats::Integer=1000; maxi
Xn = zerostoepsilon(X)
for i = 1:repeats
local c_new
@Suppressor.suppress begin
Suppressor.@suppress begin
c_new = Clustering.kmeans(X, k; maxiter=maxiter, tol=tol, display=display, distance=distance)
end
Xd = Distances.pairwise(distance, Xn; dims=2)
Expand Down
4 changes: 2 additions & 2 deletions src/NMFkExecute.jl
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ function execute(X::AbstractArray{T,N}, nkrange::AbstractRange{Int}, nNMF::Integ
end
@info("Results")
for nk in nkrange
println("Signals: $(@Printf.sprintf("%2d", nk)) Fit: $(@Printf.sprintf("%12.7g", fitquality[nk])) Silhouette: $(@Printf.sprintf("%12.7g", robustness[nk])) AIC: $(@Printf.sprintf("%12.7g", aic[nk]))")
println("Signals: $(Printf.@sprintf("%2d", nk)) Fit: $(Printf.@sprintf("%12.7g", fitquality[nk])) Silhouette: $(Printf.@sprintf("%12.7g", robustness[nk])) AIC: $(Printf.@sprintf("%12.7g", aic[nk]))")
end
kopt = getk(nkrange, robustness[nkrange], cutoff)
if isnothing(kopt)
Expand Down Expand Up @@ -72,7 +72,7 @@ function execute(X::Union{AbstractMatrix{T},AbstractArray{T}}, nk::Integer, nNMF
W, H, fitquality, robustness, aic = NMFk.execute_run(X, nk, nNMF; clusterWmatrix=clusterWmatrix, veryquiet=veryquiet, resultdir=resultdir, casefilename=casefilename, kw...)
end
so = signalorder(W, H)
!veryquiet && println("Signals: $(@Printf.sprintf("%2d", nk)) Fit: $(@Printf.sprintf("%12.7g", fitquality)) Silhouette: $(@Printf.sprintf("%12.7g", robustness)) AIC: $(@Printf.sprintf("%12.7g", aic)) Signal order: $(so)")
!veryquiet && println("Signals: $(Printf.@sprintf("%2d", nk)) Fit: $(Printf.@sprintf("%12.7g", fitquality)) Silhouette: $(Printf.@sprintf("%12.7g", robustness)) AIC: $(Printf.@sprintf("%12.7g", aic)) Signal order: $(so)")
if save && casefilename != ""
filename = joinpathcheck(resultdir, "$casefilename-$nk-$nNMF.jld")
recursivemkdir(filename)
Expand Down
8 changes: 4 additions & 4 deletions src/NMFkHelpers.jl
Original file line number Diff line number Diff line change
Expand Up @@ -387,10 +387,10 @@ function estimateflip_permutedims(X::AbstractMatrix{T}, Y::AbstractMatrix{T}, A:
vflip = falses(nparam)
for i = 1:nparam
local H1
@Suppressor.suppress W, H1, of, sil, aic = NMFk.execute(permutedims(Y[:,i]), nk, nNNF; Winit=permutedims(X[:,i]), Wfixed=true, save=save, method=method, regularizationweight=regularizationweight, kw...);
Suppressor.@suppress W, H1, of, sil, aic = NMFk.execute(permutedims(Y[:,i]), nk, nNNF; Winit=permutedims(X[:,i]), Wfixed=true, save=save, method=method, regularizationweight=regularizationweight, kw...);
a = NMFk.normnan(permutedims(A) .- (permutedims(B) * H1))
local H2
@Suppressor.suppress W, H2, of, sil, aic = NMFk.execute(permutedims(NMFk.flip(Y[:,i])), nk, nNNF; Winit=permutedims(NMFk.flip(X[:,i])), Wfixed=true, save=save, method=method, regularizationweight=regularizationweight, kw...);
Suppressor.@suppress W, H2, of, sil, aic = NMFk.execute(permutedims(NMFk.flip(Y[:,i])), nk, nNNF; Winit=permutedims(NMFk.flip(X[:,i])), Wfixed=true, save=save, method=method, regularizationweight=regularizationweight, kw...);
b = NMFk.normnan(permutedims(A) .- (permutedims(B) * H2))
vflip[i] = a < b ? false : true
end
Expand All @@ -407,10 +407,10 @@ function estimateflip(X::AbstractMatrix{T}, Y::AbstractMatrix{T}, A::AbstractMat
vflip = falses(nparam)
for i = 1:nparam
local H1
@Suppressor.suppress W, H1, of, sil, aic = NMFk.execute(Y[i:i,:], nk, nNNF; Winit=X[i:i,:], Wfixed=true, save=save, method=method, regularizationweight=regularizationweight, kw...);
Suppressor.@suppress W, H1, of, sil, aic = NMFk.execute(Y[i:i,:], nk, nNNF; Winit=X[i:i,:], Wfixed=true, save=save, method=method, regularizationweight=regularizationweight, kw...);
a = NMFk.normnan(B .- (A * H1))
local H2
@Suppressor.suppress W, H2, of, sil, aic = NMFk.execute(NMFk.flip(Y[i:i,:]), nk, nNNF; Winit=NMFk.flip(X[i:i,:]), Wfixed=true, save=save, method=method, regularizationweight=regularizationweight, kw...);
Suppressor.@suppress W, H2, of, sil, aic = NMFk.execute(NMFk.flip(Y[i:i,:]), nk, nNNF; Winit=NMFk.flip(X[i:i,:]), Wfixed=true, save=save, method=method, regularizationweight=regularizationweight, kw...);
b = NMFk.normnan(B .- (A * H2))
vflip[i] = a < b ? false : true
end
Expand Down
2 changes: 1 addition & 1 deletion src/NMFkIO.jl
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ function load(nk::Integer, nNMF::Integer=10; type::DataType=Float64, dim::Intege
if isfile(filename)
W, H, fitquality, robustness, aic = JLD.load(filename, "W", "H", "fit", "robustness", "aic")
so = signalorder(W, H)
!quiet && println("Signals: $(@Printf.sprintf("%2d", nk)) Fit: $(@Printf.sprintf("%12.7g", fitquality)) Silhouette: $(@Printf.sprintf("%12.7g", robustness)) AIC: $(@Printf.sprintf("%12.7g", aic)) Signal order: $(so)")
!quiet && println("Signals: $(Printf.@sprintf("%2d", nk)) Fit: $(Printf.@sprintf("%12.7g", fitquality)) Silhouette: $(Printf.@sprintf("%12.7g", robustness)) AIC: $(Printf.@sprintf("%12.7g", aic)) Signal order: $(so)")
return W[:,so], H[so,:], fitquality, robustness, aic
else
!quiet && @warn("File named $filename is missing!")
Expand Down
24 changes: 12 additions & 12 deletions src/NMFkJuMP.jl
Original file line number Diff line number Diff line change
Expand Up @@ -122,32 +122,32 @@ function jump(X::AbstractArray{T}, nk::Int; method::Symbol=:nlopt, algorithm::Sy
W = Winit
else
constrainW && normalize!(Winit)
@JuMP.variable(m, W[i=1:nummixtures, j=1:nk], start=convert(T, Winit[i, j]))
Wnonneg && @JuMP.constraint(m, W .>= 0)
constrainW && @JuMP.constraint(m, W .<= 1)
JuMP.@variable(m, W[i=1:nummixtures, j=1:nk], start=convert(T, Winit[i, j]))
Wnonneg && JuMP.@constraint(m, W .>= 0)
constrainW && JuMP.@constraint(m, W .<= 1)
end
if Hfixed
H = Hinit
else
constrainH && normalize!(Hinit)
@JuMP.variable(m, H[i=1:nk, j=1:numconstituents], start=convert(T, Hinit[i, j]))
Hnonneg && @JuMP.constraint(m, H .>= 0)
constrainH && @JuMP.constraint(m, H .<= 1)
JuMP.@variable(m, H[i=1:nk, j=1:numconstituents], start=convert(T, Hinit[i, j]))
Hnonneg && JuMP.@constraint(m, H .>= 0)
constrainH && JuMP.@constraint(m, H .<= 1)
end
if kullbackleibler
smallnumber = eps(Float64)
@JuMP.NLobjective(m, Min, sum(X[i, j] * (log(smallnumber + X[i, j]) - log(smallnumber + sum(W[i, k] * H[k, j] for k = 1:nk))) - X[i, j] + sum(W[i, k] * H[k, j] for k = 1:nk) for i=1:nummixtures, j=1:numconstituents))
JuMP.@NLobjective(m, Min, sum(X[i, j] * (log(smallnumber + X[i, j]) - log(smallnumber + sum(W[i, k] * H[k, j] for k = 1:nk))) - X[i, j] + sum(W[i, k] * H[k, j] for k = 1:nk) for i=1:nummixtures, j=1:numconstituents))
else
if regularizationweight == 0.
@JuMP.NLobjective(m, Min,
JuMP.@NLobjective(m, Min,
sum(sum(obsweights[i, j] * (sum(W[i, k] * H[k, j] for k=1:nk) - X[i, j])^2 for i=1:nummixtures) for j=1:numconstituents))
else
if Hfixed
@JuMP.NLobjective(m, Min,
JuMP.@NLobjective(m, Min,
regularizationweight * sum(sum(log(1. + W[i, j])^2 for i=1:numconstituents) for j=1:nk) / nk +
sum(sum(obsweights[i, j] * (sum(W[i, k] * H[k, j] for k=1:nk) - X[i, j])^2 for i=1:nummixtures) for j=1:numconstituents))
else
@JuMP.NLobjective(m, Min,
JuMP.@NLobjective(m, Min,
regularizationweight * sum(sum(log(1. + H[i, j])^2 for i=1:nk) for j=1:numconstituents) / nk +
sum(sum(obsweights[i, j] * (sum(W[i, k] * H[k, j] for k=1:nk) - X[i, j])^2 for i=1:nummixtures) for j=1:numconstituents))
end
Expand All @@ -160,7 +160,7 @@ function jump(X::AbstractArray{T}, nk::Int; method::Symbol=:nlopt, algorithm::Sy
jumpvariables = JuMP.all_variables(m)
jumpvalues = JuMP.start_value.(jumpvariables)
if quiet
@Suppressor.suppress JuMP.optimize!(m)
Suppressor.@suppress JuMP.optimize!(m)
else
JuMP.optimize!(m)
end
Expand Down Expand Up @@ -194,7 +194,7 @@ function jump(X::AbstractArray{T}, nk::Int; method::Symbol=:nlopt, algorithm::Sy
frame += 1
end
if quiet
@Suppressor.suppress JuMP.optimize!(m)
Suppressor.@suppress JuMP.optimize!(m)
else
JuMP.optimize!(m)
end
Expand Down
4 changes: 2 additions & 2 deletions src/NMFkMap.jl
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ function plotmap(X::AbstractMatrix, fips::AbstractVector, dim::Integer=1, signal
ltitle = "$(titletext) $(signalidtext)"
end
end
p = @VegaLite.vlplot(
p = VegaLite.@vlplot(
title=ttitle,
:geoshape,
width=500, height=300,
Expand Down Expand Up @@ -119,7 +119,7 @@ function plotmap(X::AbstractVector, fips::AbstractVector; us10m=VegaDatasets.dat
@assert length(X) == length(fips)
nc = length(unique(sort(X))) + 1
df = DataFrames.DataFrame(FIPS=[fips[goodcounties]; fips[.!goodcounties]], Z=[X; zeros(sum(.!goodcounties))])
p = @VegaLite.vlplot(
p = VegaLite.@vlplot(
:geoshape,
width=500, height=300,
data={
Expand Down
8 changes: 4 additions & 4 deletions src/NMFkMapping.jl
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ function mapping_old(X::AbstractMatrix{T}, Y::AbstractMatrix{T}, A::AbstractMatr
np = size(X, 2)
local W1, H1, of1, sil1, aic1
@info "Mapping matrix size: $nk x $(size(Y, 1))"
@Suppressor.suppress W1, H1, of1, sil1, aic1 = NMFk.execute(permutedims(Y), nk, nNNF; Winit=permutedims(X), Wfixed=true, save=save, method=method, regularizationweight=regularizationweight, kw...)
Suppressor.@suppress W1, H1, of1, sil1, aic1 = NMFk.execute(permutedims(Y), nk, nNNF; Winit=permutedims(X), Wfixed=true, save=save, method=method, regularizationweight=regularizationweight, kw...)
a = NMFk.normnan(permutedims(B) .- (permutedims(A) * H1))
vflip = NMFk.estimateflip_permutedims(X, Y, A, B)
Xn = hcat(map(i->vflip[i] ? NMFk.flip(X[:,i]) : X[:,i], 1:np)...)
Yn = hcat(map(i->vflip[i] ? NMFk.flip(Y[:,i]) : Y[:,i], 1:np)...)
local W2, H2, of2, sil2, aic2
@Suppressor.suppress W2, H2, of2, sil2, aic2 = NMFk.execute(permutedims(Yn), nk, nNNF; Winit=permutedims(Xn), Wfixed=true, save=save, method=method, regularizationweight=regularizationweight, kw...)
Suppressor.@suppress W2, H2, of2, sil2, aic2 = NMFk.execute(permutedims(Yn), nk, nNNF; Winit=permutedims(Xn), Wfixed=true, save=save, method=method, regularizationweight=regularizationweight, kw...)
b = NMFk.normnan(permutedims(B) .- (permutedims(A) * H2))
if a < b
return W1, H1, of1, sil1, aic1
Expand Down Expand Up @@ -51,7 +51,7 @@ function mapping(X::AbstractMatrix{T}, Y::AbstractMatrix{T}, A::AbstractMatrix{T
@info "Mapping matrix size: $nk x $(size(Y, 2))"
X[inan] .= 0
local W1, H1, of1, sil1, aic1
@Suppressor.suppress W1, H1, of1, sil1, aic1 = NMFk.execute(Y, nk, nNNF; Winit=X, Wfixed=true, save=save, method=method, kw..., kwx...)
Suppressor.@suppress W1, H1, of1, sil1, aic1 = NMFk.execute(Y, nk, nNNF; Winit=X, Wfixed=true, save=save, method=method, kw..., kwx...)
iz = vec(NMFk.maximumnan(Y; dims=1) .== 0)
H1[:, iz] .= 0
if fliptest
Expand All @@ -60,7 +60,7 @@ function mapping(X::AbstractMatrix{T}, Y::AbstractMatrix{T}, A::AbstractMatrix{T
Xn = permutedims(hcat(map(i->vflip[i] ? NMFk.flip(X[i,:]) : X[i,:], 1:np)...))
Yn = permutedims(hcat(map(i->vflip[i] ? NMFk.flip(Y[i,:]) : Y[i,:], 1:np)...))
local W2, H2, of2, sil2, aic2
@Suppressor.suppress W2, H2, of2, sil2, aic2 = NMFk.execute(Yn, nk, nNNF; Winit=Xn, Wfixed=true, save=save, method=method, kw..., kwx...)
Suppressor.@suppress W2, H2, of2, sil2, aic2 = NMFk.execute(Yn, nk, nNNF; Winit=Xn, Wfixed=true, save=save, method=method, kw..., kwx...)
iz = vec(NMFk.maximumnan(Yn; dims=1) .== 0)
H2[:, iz] .= 0
b = NMFk.normnan(B .- (A * H2))
Expand Down
50 changes: 25 additions & 25 deletions src/NMFkMixMatrix.jl
Original file line number Diff line number Diff line change
Expand Up @@ -93,21 +93,21 @@ function mixmatchdata(concentrations_in::AbstractMatrix{T}, numbuckets::Int; met
m = JuMP.Model(NLopt.Optimizer)
JuMP.set_optimizer_attributes(m, "algorithm" => algorithm, "maxeval" => maxiter) # "xtol_abs" => tolX, "ftol_abs" => tol
end
@JuMP.variable(m, mixer[i=1:nummixtures, j=1:numbuckets], start = convert(T, Winit[i, j]))
@JuMP.variable(m, buckets[i=1:numbuckets, j=1:numconstituents], start = convert(T, Hinit[i, j]))
JuMP.@variable(m, mixer[i=1:nummixtures, j=1:numbuckets], start = convert(T, Winit[i, j]))
JuMP.@variable(m, buckets[i=1:numbuckets, j=1:numconstituents], start = convert(T, Hinit[i, j]))
if !normalize
@JuMP.constraint(m, buckets .>= 0)
JuMP.@constraint(m, buckets .>= 0)
end
@JuMP.constraint(m, mixer .>= 0)
JuMP.@constraint(m, mixer .>= 0)
for i = 1:nummixtures
@JuMP.constraint(m, sum(mixer[i, j] for j=1:numbuckets) == 1.)
JuMP.@constraint(m, sum(mixer[i, j] for j=1:numbuckets) == 1.)
end
if sizeof(ratios) == 0
@JuMP.NLobjective(m, Min,
JuMP.@NLobjective(m, Min,
regularizationweight * sum(sum(log(1. + buckets[i, j])^2 for i=1:numbuckets) for j=1:numconstituents) / numbuckets +
sum(sum(concweights[i, j] * (sum(mixer[i, k] * buckets[k, j] for k=1:numbuckets) - concentrations[i, j])^2 for i=1:nummixtures) for j=1:numconstituents))
else
@JuMP.NLobjective(m, Min,
JuMP.@NLobjective(m, Min,
regularizationweight * sum(sum(log(1. + buckets[i, j])^2 for i=1:numbuckets) for j=1:numconstituents) / numbuckets +
sum(sum(concweights[i, j] * (sum(mixer[i, k] * buckets[k, j] for k=1:numbuckets) - concentrations[i, j])^2 for i=1:nummixtures) for j=1:numconstituents) +
sum(sum(ratiosweightmatrix[i, j] *
Expand All @@ -122,7 +122,7 @@ function mixmatchdata(concentrations_in::AbstractMatrix{T}, numbuckets::Int; met
jumpvariables = JuMP.all_variables(m)
jumpvalues = JuMP.start_value.(jumpvariables)
if quiet
@Suppressor.suppress JuMP.optimize!(m)
Suppressor.@suppress JuMP.optimize!(m)
else
JuMP.optimize!(m)
end
Expand All @@ -143,7 +143,7 @@ function mixmatchdata(concentrations_in::AbstractMatrix{T}, numbuckets::Int; met
while LinearAlgebra.norm(jumpvalues - JuMP.value.(jumpvariables)) > tolX && ofbest > tol && baditers < maxbaditers && reattempts < maxreattempts
jumpvalues = JuMP.value.(jumpvariables)
if quiet
@Suppressor.suppress JuMP.optimize!(m)
Suppressor.@suppress JuMP.optimize!(m)
else
JuMP.optimize!(m)
end
Expand Down Expand Up @@ -308,31 +308,31 @@ function mixmatchdeltas(concentrations_in::AbstractMatrix{T}, deltas_in::Abstrac
m = JuMP.Model(NLopt.Optimizer)
JuMP.set_optimizer_attributes(m, "algorithm" => algorithm, "maxeval" => maxiter, "xtol_abs" => tolX, "ftol_abs" => tol)
end
@JuMP.variable(m, mixer[i=1:nummixtures, j=1:numbuckets], start = convert(T, Winit[i, j]))
@JuMP.variable(m, buckets[i=1:numbuckets, j=1:numconstituents], start = convert(T, Hinit[i, j]))
@JuMP.variable(m, bucketdeltas[i=1:numbuckets, j=1:numdeltas], start = convert(T, Hinitd[i, j]))
@JuMP.constraint(m, buckets .>= 0)
@JuMP.constraint(m, mixer .>= 0)
JuMP.@variable(m, mixer[i=1:nummixtures, j=1:numbuckets], start = convert(T, Winit[i, j]))
JuMP.@variable(m, buckets[i=1:numbuckets, j=1:numconstituents], start = convert(T, Hinit[i, j]))
JuMP.@variable(m, bucketdeltas[i=1:numbuckets, j=1:numdeltas], start = convert(T, Hinitd[i, j]))
JuMP.@constraint(m, buckets .>= 0)
JuMP.@constraint(m, mixer .>= 0)
for i = 1:nummixtures
@JuMP.constraint(m, sum(mixer[i, j] for j=1:numbuckets) == 1.)
JuMP.@constraint(m, sum(mixer[i, j] for j=1:numbuckets) == 1.)
end
#=
for i = 1:numbuckets
for j = 1:numconstituents
if i != 1 || j != 1
@JuMP.constraint(m, buckets[i, j] == Hinit[i, j]) # Fix buckets for testing
JuMP.@constraint(m, buckets[i, j] == Hinit[i, j]) # Fix buckets for testing
end
end
end
for i = 1:numbuckets
for j = 1:numdeltas
#if i != 1 || j != 1
@JuMP.constraint(m, bucketdeltas[i, j] == Hinitd[i, j]) # Fix buckets for testing
JuMP.@constraint(m, bucketdeltas[i, j] == Hinitd[i, j]) # Fix buckets for testing
#end
end
end
=#
@JuMP.NLobjective(m, Min,
JuMP.@NLobjective(m, Min,
regularizationweight * sum(sum(log(1. + buckets[i, j])^2 for i=1:numbuckets) for j=1:numconstituents) / numbuckets +
regularizationweight * sum(sum(log(1. + abs(bucketdeltas[i, j]))^2 for i=1:numbuckets) for j=1:numdeltas) / numbuckets +
sum(sum(concweights[i, j] * (concentrations[i, j] - (sum(mixer[i, k] * buckets[k, j] for k=1:numbuckets)))^2 for i=1:nummixtures) for j=1:numconstituents) +
Expand Down Expand Up @@ -382,21 +382,21 @@ function mixmatchwaterdeltas(deltas::AbstractMatrix{T}, numbuckets::Int; method:
m = JuMP.Model(Ipopt.Optimizer)
JuMP.set_optimizer_attributes(m, "max_iter" => maxiter, "print_level" => verbosity)
if random
@JuMP.variable(m, mixer[1:nummixtures, 1:numbuckets] >= 0., start=randn(T))
@JuMP.variable(m, buckets[1:numbuckets, 1:numconstituents], start=maxdeltaguess * rand(T))
JuMP.@variable(m, mixer[1:nummixtures, 1:numbuckets] >= 0., start=randn(T))
JuMP.@variable(m, buckets[1:numbuckets, 1:numconstituents], start=maxdeltaguess * rand(T))
else
@JuMP.variable(m, mixer[1:nummixtures, 1:numbuckets] >= 0.)
@JuMP.variable(m, buckets[1:numbuckets, 1:numconstituents])
JuMP.@variable(m, mixer[1:nummixtures, 1:numbuckets] >= 0.)
JuMP.@variable(m, buckets[1:numbuckets, 1:numconstituents])
end
@JuMP.constraint(m, mixer .<= 1.)
JuMP.@constraint(m, mixer .<= 1.)
for i in axes(deltas, 1)
@JuMP.constraint(m, sum(mixer[i, j] for j=1:numbuckets) == 1.)
JuMP.@constraint(m, sum(mixer[i, j] for j=1:numbuckets) == 1.)
end
concweights = ones(T, size(deltas))
nans = isnan(deltas)
deltas[nans] = 0
concweights[nans] = 0
@JuMP.NLobjective(m, Min,
JuMP.@NLobjective(m, Min,
regularizationweight * sum(sum((buckets[i, j] - bucketmeans[i, j])^2 for i=1:numbuckets) for j=1:numconstituents) / numbuckets +
sum(sum(concweights[i, j] * (sum(mixer[i, k] * buckets[k, j] for k=1:numbuckets) - deltas[i, j])^2 for i=1:nummixtures) for j=1:numconstituents))
if method == :ipopt
Expand Down
16 changes: 8 additions & 8 deletions src/NMFkMixTensor.jl
Original file line number Diff line number Diff line change
Expand Up @@ -51,24 +51,24 @@ function mixmatchdata(concentrations::AbstractArray{T, 3}, numbuckets::Int; meth
m = JuMP.Model(NLopt.Optimizer)
JuMP.set_optimizer_attributes(m, "algorithm" => algorithm, "maxeval" => maxiter) # "xtol_abs" => tolX, "ftol_abs" => tol
end
@JuMP.variable(m, mixer[i=1:nummixtures, j=1:numbuckets, k=1:ntimes], start=convert(T, Winit[i, j, k]))
@JuMP.variable(m, buckets[i=1:numbuckets, j=1:numconstituents], start=convert(T, Hinit[i, j]))
JuMP.@variable(m, mixer[i=1:nummixtures, j=1:numbuckets, k=1:ntimes], start=convert(T, Winit[i, j, k]))
JuMP.@variable(m, buckets[i=1:numbuckets, j=1:numconstituents], start=convert(T, Hinit[i, j]))
if !normalize
@JuMP.constraint(m, buckets .>= 0)
JuMP.@constraint(m, buckets .>= 0)
end
@JuMP.constraint(m, mixer .>= 0)
JuMP.@constraint(m, mixer .>= 0)
for k = 1:ntimes
for i = 1:nummixtures
@JuMP.constraint(m, sum(mixer[i, j, k] for j=1:numbuckets) == 1.)
JuMP.@constraint(m, sum(mixer[i, j, k] for j=1:numbuckets) == 1.)
end
end
@JuMP.NLobjective(m, Min,
JuMP.@NLobjective(m, Min,
regularizationweight * sum(sum(log(1. + buckets[i, j])^2 for i=1:numbuckets) for j=1:numconstituents) / numbuckets +
sum(sum(sum(concweights[i, j, t] * (sum(mixer[i, k, t] * buckets[k, j] for k=1:numbuckets) - concentrations[i, j, t])^2 for i=1:nummixtures) for j=1:numconstituents) for t=1:ntimes))
jumpvariables = JuMP.all_variables(m)
jumpvalues = JuMP.start_value.(jumpvariables)
if quiet
@Suppressor.suppress JuMP.optimize!(m)
Suppressor.@suppress JuMP.optimize!(m)
else
JuMP.optimize!(m)
end
Expand All @@ -84,7 +84,7 @@ function mixmatchdata(concentrations::AbstractArray{T, 3}, numbuckets::Int; meth
while LinearAlgebra.norm(jumpvalues - JuMP.value.(jumpvariables)) > tolX && ofbest > tol && baditers < maxbaditers && reattempts < maxreattempts
jumpvalues = JuMP.value.(jumpvariables)
if quiet
@Suppressor.suppress JuMP.optimize!(m)
Suppressor.@suppress JuMP.optimize!(m)
else
JuMP.optimize!(m)
end
Expand Down
4 changes: 2 additions & 2 deletions src/NMFkPlot.jl
Original file line number Diff line number Diff line change
Expand Up @@ -498,8 +498,8 @@ function plot2dmatrixcomponents(M::AbstractMatrix, dim::Integer=1; quiet::Bool=f
return ff
end

"Convert `@Printf.sprintf` macro into `sprintf` function"
sprintf(args...) = eval(:@Printf.sprintf($(args...)))
"Convert `Printf.@sprintf` macro into `sprintf` function"
sprintf(args...) = eval(:Printf.@sprintf($(args...)))

"Generate Sankey plots"
function sankey(c1::AbstractVector, c2::AbstractVector, t1::AbstractString, t2::AbstractString; htmlfile::AbstractString="", pdffile::AbstractString="")
Expand Down
Loading

0 comments on commit d7bb230

Please sign in to comment.