Example usage for java.util.concurrent.locks Lock lock

List of usage examples for java.util.concurrent.locks Lock lock

Introduction

In this page you can find the example usage for java.util.concurrent.locks Lock lock.

Prototype

lock

Source Link

Usage

From source file:net.myrrix.online.ServerRecommender.java

@Override
public List<RecommendedItem> recommendToAnonymous(long[] itemIDs, float[] values, int howMany,
        IDRescorer rescorer) throws NotReadyException, NoSuchItemException {

    Preconditions.checkArgument(howMany > 0, "howMany must be positive");

    float[] anonymousUserFeatures = buildAnonymousUserFeatures(itemIDs, values);

    FastIDSet userKnownItemIDs = new FastIDSet(itemIDs.length);
    for (long itemID : itemIDs) {
        userKnownItemIDs.add(itemID);//from www .  ja  v  a2s. c  o  m
    }

    float[][] anonymousFeaturesAsArray = { anonymousUserFeatures };

    Generation generation = getCurrentGeneration();
    Lock yLock = generation.getYLock().readLock();
    yLock.lock();
    try {
        return multithreadedTopN(anonymousFeaturesAsArray, userKnownItemIDs, generation.getUserTagIDs(),
                rescorer, howMany, generation.getCandidateFilter());
    } finally {
        yLock.unlock();
    }
}

From source file:net.myrrix.online.ServerRecommender.java

@Override
public int getNumUserClusters() throws NotReadyException {
    Generation generation = getCurrentGeneration();
    Collection<IDCluster> clusters = generation.getUserClusters();
    if (clusters == null || clusters.isEmpty()) {
        throw new UnsupportedOperationException();
    }/*w ww .ja  v a  2s  . co m*/
    Lock lock = generation.getUserClustersLock().readLock();
    lock.lock();
    try {
        return clusters.size();
    } finally {
        lock.unlock();
    }
}

From source file:net.myrrix.online.ServerRecommender.java

@Override
public int getNumItemClusters() throws NotReadyException {
    Generation generation = getCurrentGeneration();
    Collection<IDCluster> clusters = generation.getItemClusters();
    if (clusters == null || clusters.isEmpty()) {
        throw new UnsupportedOperationException();
    }/*w  w  w.  j a  va  2 s .  c o  m*/
    Lock lock = generation.getItemClustersLock().readLock();
    lock.lock();
    try {
        return clusters.size();
    } finally {
        lock.unlock();
    }
}

From source file:net.myrrix.online.ServerRecommender.java

/**
 * One-argument version of {@link #mostSimilarItems(long[], int, Rescorer)}.
 *///from  w  ww  . j  a  v a2  s. c o  m
@Override
public List<RecommendedItem> mostSimilarItems(long itemID, int howMany, Rescorer<LongPair> rescorer)
        throws NoSuchItemException, NotReadyException {

    Preconditions.checkArgument(howMany > 0, "howMany must be positive");

    Generation generation = getCurrentGeneration();
    FastByIDMap<float[]> Y = generation.getY();

    Lock yLock = generation.getYLock().readLock();
    yLock.lock();
    try {

        float[] itemFeatures = Y.get(itemID);
        if (itemFeatures == null) {
            throw new NoSuchItemException(itemID);
        }

        return TopN.selectTopN(new MostSimilarItemIterator(Y.entrySet().iterator(), generation.getUserTagIDs(),
                new long[] { itemID }, new float[][] { itemFeatures }, rescorer), howMany);
    } finally {
        yLock.unlock();
    }

}

From source file:net.myrrix.online.ServerRecommender.java

/**
 * Computes items most similar to an item or items. The returned items have the highest average similarity
 * to the given items.// ww  w  .ja va2  s. com
 *
 * @param itemIDs items for which most similar items are required
 * @param howMany maximum number of similar items to return; fewer may be returned
 * @param rescorer rescoring function used to modify item-item similarities before ranking results
 * @return {@link RecommendedItem}s representing the top recommendations for the user, ordered by quality,
 *  descending. The score associated to it is an opaque value. Larger means more similar, but no further
 *  interpretation may necessarily be applied.
 * @throws NoSuchItemException if any of the items is not known in the model
 * @throws NotReadyException if the recommender has no model available yet
 */
@Override
public List<RecommendedItem> mostSimilarItems(long[] itemIDs, int howMany, Rescorer<LongPair> rescorer)
        throws NoSuchItemException, NotReadyException {

    Preconditions.checkArgument(howMany > 0, "howMany must be positive");

    Generation generation = getCurrentGeneration();
    FastByIDMap<float[]> Y = generation.getY();

    Lock yLock = generation.getYLock().readLock();
    yLock.lock();
    try {

        List<float[]> itemFeatures = Lists.newArrayListWithCapacity(itemIDs.length);
        for (long itemID : itemIDs) {
            float[] features = Y.get(itemID);
            if (features != null) {
                itemFeatures.add(features);
            }
        }
        if (itemFeatures.isEmpty()) {
            throw new NoSuchItemException(Arrays.toString(itemIDs));
        }
        float[][] itemFeaturesArray = itemFeatures.toArray(new float[itemFeatures.size()][]);

        return TopN.selectTopN(new MostSimilarItemIterator(Y.entrySet().iterator(), generation.getUserTagIDs(),
                itemIDs, itemFeaturesArray, rescorer), howMany);
    } finally {
        yLock.unlock();
    }
}

From source file:net.myrrix.online.ServerRecommender.java

@Override
public float[] estimatePreferences(long userID, long... itemIDs) throws NotReadyException {

    Generation generation = getCurrentGeneration();
    FastByIDMap<float[]> X = generation.getX();

    float[] userFeatures;
    Lock xLock = generation.getXLock().readLock();
    xLock.lock();
    try {//from   w w  w. j  a v a  2  s  .c om
        userFeatures = X.get(userID);
    } finally {
        xLock.unlock();
    }
    if (userFeatures == null) {
        return new float[itemIDs.length]; // All 0.0f
    }

    FastByIDMap<float[]> Y = generation.getY();

    Lock yLock = generation.getYLock().readLock();
    yLock.lock();
    try {
        float[] result = new float[itemIDs.length];
        for (int i = 0; i < itemIDs.length; i++) {
            long itemID = itemIDs[i];
            float[] itemFeatures = Y.get(itemID);
            if (itemFeatures != null) {
                float value = (float) SimpleVectorMath.dot(itemFeatures, userFeatures);
                Preconditions.checkState(LangUtils.isFinite(value), "Bad estimate");
                result[i] = value;
            } // else leave value at 0.0f
        }
        return result;
    } finally {
        yLock.unlock();
    }
}

From source file:net.myrrix.online.ServerRecommender.java

@Override
public float[] similarityToItem(long toItemID, long... itemIDs) throws TasteException {

    Generation generation = getCurrentGeneration();
    FastByIDMap<float[]> Y = generation.getY();

    float[] similarities = new float[itemIDs.length];
    Lock yLock = generation.getYLock().readLock();
    yLock.lock();
    try {/*from  w w  w  .java 2  s.  co m*/

        float[] toFeatures = Y.get(toItemID);
        if (toFeatures == null) {
            throw new NoSuchItemException(toItemID);
        }
        double toFeaturesNorm = SimpleVectorMath.norm(toFeatures);

        boolean anyFound = false;
        for (int i = 0; i < similarities.length; i++) {
            float[] features = Y.get(itemIDs[i]);
            if (features == null) {
                similarities[i] = Float.NaN;
            } else {
                anyFound = true;
                double featuresNorm = SimpleVectorMath.norm(features);
                similarities[i] = (float) (SimpleVectorMath.dot(features, toFeatures)
                        / (featuresNorm * toFeaturesNorm));
            }
        }
        if (!anyFound) {
            throw new NoSuchItemException(Arrays.toString(itemIDs));
        }

    } finally {
        yLock.unlock();
    }

    return similarities;
}

From source file:net.myrrix.online.ServerRecommender.java

public void setUserTag(long userID, String tag, float value, boolean bulk) {
    Preconditions.checkNotNull(tag);//from www . ja va  2s .co  m
    Preconditions.checkArgument(!tag.isEmpty());
    // Record datum
    try {
        generationManager.appendUserTag(userID, tag, value, bulk);
    } catch (IOException ioe) {
        log.warn("Could not append datum; continuing", ioe);
    }

    Generation generation;
    try {
        generation = getCurrentGeneration();
    } catch (NotReadyException nre) {
        // Corner case -- no model ready so all we can do is record (above). Don't fail the request.
        return;
    }

    long tagID = tagHasher.toLongID(tag);

    FastIDSet userTagIDs = generation.getUserTagIDs();
    Lock userTagWriteLock = generation.getYLock().writeLock();
    userTagWriteLock.lock();
    try {
        userTagIDs.add(tagID);
    } finally {
        userTagWriteLock.unlock();
    }

    float[] userFeatures = getFeatures(userID, generation.getX(), generation.getXLock());
    float[] tagFeatures = getFeatures(tagID, generation.getY(), generation.getYLock());
    updateFeatures(userFeatures, tagFeatures, value, generation);

    updateClusters(userID, userFeatures, generation.getUserClusters(),
            generation.getUserClustersLock().readLock());
}

From source file:net.myrrix.online.ServerRecommender.java

public void setItemTag(String tag, long itemID, float value, boolean bulk) {
    Preconditions.checkNotNull(tag);//from   www .j a v a  2 s  .c  o m
    Preconditions.checkArgument(!tag.isEmpty());
    // Record datum
    try {
        generationManager.appendItemTag(tag, itemID, value, bulk);
    } catch (IOException ioe) {
        log.warn("Could not append datum; continuing", ioe);
    }

    Generation generation;
    try {
        generation = getCurrentGeneration();
    } catch (NotReadyException nre) {
        // Corner case -- no model ready so all we can do is record (above). Don't fail the request.
        return;
    }

    long tagID = tagHasher.toLongID(tag);

    FastIDSet itemTagIDs = generation.getItemTagIDs();
    Lock itemTagWriteLock = generation.getXLock().writeLock();
    itemTagWriteLock.lock();
    try {
        itemTagIDs.add(tagID);
    } finally {
        itemTagWriteLock.unlock();
    }

    float[] tagFeatures = getFeatures(tagID, generation.getX(), generation.getXLock());
    float[] itemFeatures = getFeatures(itemID, generation.getY(), generation.getYLock());
    updateFeatures(tagFeatures, itemFeatures, value, generation);

    updateClusters(itemID, itemFeatures, generation.getItemClusters(),
            generation.getItemClustersLock().readLock());
}

From source file:net.myrrix.online.ServerRecommender.java

@Override
public float estimateForAnonymous(long toItemID, long[] itemIDs, float[] values)
        throws NotReadyException, NoSuchItemException {

    Generation generation = getCurrentGeneration();
    FastByIDMap<float[]> Y = generation.getY();
    Lock yLock = generation.getYLock().readLock();
    float[] toItemFeatures;
    yLock.lock();
    try {/*www.  ja  v  a  2s .com*/
        toItemFeatures = Y.get(toItemID);
    } finally {
        yLock.unlock();
    }

    if (toItemFeatures == null) {
        throw new NoSuchItemException(toItemID);
    }

    float[] anonymousUserFeatures = buildAnonymousUserFeatures(itemIDs, values);

    return (float) SimpleVectorMath.dot(anonymousUserFeatures, toItemFeatures);
}